ticdc事件合并问题

同一个事务中同一条数据的多个update【或on duplicate key update】 cdc事件会被合并。
如果不是同一个事务,则不会被合并。
如下是示例:

CREATE TABLE `store_dml_test` (
  `id` bigint(20) unsigned NOT NULL COMMENT 'id',
  `store_id` bigint(20) unsigned NOT NULL COMMENT '店铺id',
  `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
  PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

假如数据库该表中已经存在一条id=5653233197006196741:

如果连续执行如下3条update 语句【3个事务】,ticdc侧会订阅到3条update事件:

update store_dml_test set store_id = 50 where id = 5653233197006196741;
update store_dml_test set store_id = 51 where id = 5653233197006196741;
update store_dml_test set store_id = 52 where id = 5653233197006196741;

但如果是执行如下的3条update语句【在1个事务中】,ticdc侧只会订阅到最后1条update事件:

begin;
update store_mark_dml_test set store_id = 30 where id = 5653233197006196741;
update store_mark_dml_test set store_id = 31 where id = 5653233197006196741;
update store_mark_dml_test set store_id =  where id = 5653233197006196741;
commit;

tidb是否有配置支持无论是哪一种情况,都能从ticdc侧订阅到3条消息,而不是只有1条。

这个是符合逻辑的,ticdc拉取的是tikv侧数据的变更,一个事务同一条数据重复变更,只会获取到最后变更的结果,https://docs.pingcap.com/zh/tidb/v6.5/ticdc-faq#在一个事务中对一行进行多次修改ticdc-会输出多条行变更事件吗

1 个赞