ticdc多个changefeed包含相同的表

【 TiDB 使用环境】线上、测试、调研
【 TiDB 版本】
【遇到的问题】
创建两个changefeed,名称为cdc1和cdc2。
这两个changefeed配置的都同步一个表 testdb.test

这种情况下,同一时刻是不是只有一个changefeed同步任务来复制这个test表上的数据?

【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

1)没有验证过,理论上会只有一个capture上的processor来处理这个task,因为testdb.test 这个表的table_id是全局唯一的,而processor owner会根据这个table_id 会把这个task hash到不同的capture上;
2)如果只有一个task(changefeed)在跑的话,这样如果sink不同,那岂不是只有一个sink工作?! 手头上暂时没有环境,回头测试下。

在有多个的sink的情况下,我没有测试。
我的环境就一个下游的tidb环境,上游同时有两个changefeed同步同一张表,没有发现什么异常。

changefeed query 查看下任务状态,看看checkpoint滚动情况

这种情况下,同一时刻是不是只有一个changefeed同步任务来复制这个test表上的数据?

不是,两个 changefeed 会同时同步这个 test 表上的数据。

那test表比如做一个insert操作,到下游复制的时候,是内部什么机制去重了吗,不然的话就是做了两次insert呀

可问题你的确配了两个changefeed啊,不就是两次;

重新创建了一个非主键的表,看到目标确实是产生了2条相同的记录。另外创建表的时候,cdc日志里面有重复执行两次DDL的信息。

如果同步一个主键的表,那么也可以同步到下游去,但是在日志里面没有看到相关的主键冲突信息。

不会去重,changefeed 之间是独立的,不知道其他 changefeed 捕捉哪些表,也不知道要同步到哪里。

重新创建了一个非主键的表,看到目标确实是产生了2条相同的记录。另外创建表的时候,cdc日志里面有重复执行两次DDL的信息。

确实会这样,如果两个 changefeed 的下游相同的话 DML 和 DDL 会重复同步。

那就还是没按照指导用了,会导致一堆问题 :star_struck:

好的,了解了,谢谢

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。