HACK
(DBS)
1
【 TiDB 使用环境】线上、测试、调研
【 TiDB 版本】
【遇到的问题】
创建两个changefeed,名称为cdc1和cdc2。
这两个changefeed配置的都同步一个表 testdb.test
这种情况下,同一时刻是不是只有一个changefeed同步任务来复制这个test表上的数据?
【复现路径】做过哪些操作出现的问题
【问题现象及影响】
【附件】
请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。
Meditator
(Wendywong020)
2
1)没有验证过,理论上会只有一个capture上的processor来处理这个task,因为testdb.test 这个表的table_id是全局唯一的,而processor owner会根据这个table_id 会把这个task hash到不同的capture上;
2)如果只有一个task(changefeed)在跑的话,这样如果sink不同,那岂不是只有一个sink工作?! 手头上暂时没有环境,回头测试下。
HACK
(DBS)
3
在有多个的sink的情况下,我没有测试。
我的环境就一个下游的tidb环境,上游同时有两个changefeed同步同一张表,没有发现什么异常。
Meditator
(Wendywong020)
4
changefeed query 查看下任务状态,看看checkpoint滚动情况
neilshen
(Neil Shen)
5
这种情况下,同一时刻是不是只有一个changefeed同步任务来复制这个test表上的数据?
不是,两个 changefeed 会同时同步这个 test 表上的数据。
HACK
(DBS)
6
那test表比如做一个insert操作,到下游复制的时候,是内部什么机制去重了吗,不然的话就是做了两次insert呀
可问题你的确配了两个changefeed啊,不就是两次;
HACK
(DBS)
8
重新创建了一个非主键的表,看到目标确实是产生了2条相同的记录。另外创建表的时候,cdc日志里面有重复执行两次DDL的信息。
如果同步一个主键的表,那么也可以同步到下游去,但是在日志里面没有看到相关的主键冲突信息。
neilshen
(Neil Shen)
9
不会去重,changefeed 之间是独立的,不知道其他 changefeed 捕捉哪些表,也不知道要同步到哪里。
重新创建了一个非主键的表,看到目标确实是产生了2条相同的记录。另外创建表的时候,cdc日志里面有重复执行两次DDL的信息。
确实会这样,如果两个 changefeed 的下游相同的话 DML 和 DDL 会重复同步。
system
(system)
关闭
12
该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。