Tidb7.1.1的Ticdc参数partition-num无效

Bug 反馈
清晰准确地描述您发现的问题,提供任何可能复现问题的步骤有助于研发同学及时处理问题
【 TiDB 版本】
Tidb7.1.1

【 Bug 的影响】
Ticdc的partition-num参数无效,导致无法指定分区数同步数据到kafka。

【可能的问题复现步骤】
1、创建3分区的kafka topic:

2、创建Ticdc changefeed:
curl -X POST http://XXX.XXX.XXX.XXX:8300/api/v2/changefeeds -d ‘{“changefeed_id”:“test-patition”,“start_ts”: 445150430914150401,“sink_uri”:“kafka://XXX.XXX.XXX.XXX:9092/kafka-task1?enable-tidb-extension=true&partition-num=1&replication-factor=1&max-message-bytes=67108864”,“replica_config”: {“filter”: {“rules”:[“test_cdc."]},“ignore_ineligible_table”: true,“mounter”: {“worker_num”: 16},“sink”: {“dispatchers”: [{“matcher”: ["test_cdc.”],“partition”: “index-value”}],“protocol”: “canal-json”}}}’

3、结果
在3分区情况下,partition-num=1和2,都不起作用,结果kafka的3个分区都出现同步数据

备注:
replication-factor=1或者3,都不影响结果。
使用 API v2 或者 命令行 cdc cli changefeed create 来创建,得到的结果都是一样的。

【看到的非预期行为】
kafka的3个分区都出现同步数据。

【期望看到的行为】
kafka只有1个分区出现同步数据,另外两个分区不应出现同步数据。

【相关组件及具体版本】
Tidb7.1.1,tiup安装:3节点tidb,3节点tikv,3节点ticdc

【其他背景信息或者截图】

Kafka主题的分区数量要与partition-num参数的值一致,你把kafka分区的数量设为1或2试试。否则Kafka 主题的分区数量为 3,那么无论你设置 partition-num 为何值,TiCDC都会将数据同步到所有分区。

分区一致试一下

那这个参数的意义何在?无论设置成多少,都会同步到所有分区,那取消掉这个参数,效果不是一样的吗?

另外,我试了一下,Tidb4.0.15,在kafka的topic为3分区的情况下,Ticdc设置partition-num=1的时候,只会同步到1个分区中,而不会同步到3个分区中。

你先把kafka的分区设置为2试下,partition-num也设置为2,你看下会同步到几个分区

Tidb7.1.1:
1、partition-num=3,topic分区数为3,同步分区数为3个
2、partition-num=2,topic分区数为3,同步分区数为3个
3、partition-num=1,topic分区数为3,同步分区数为3个

4、partition-num=2,topic分区数为2,同步分区数为2个
5、partition-num=1,topic分区数为2,同步分区数为2个

Tidb4.0.15:
1、partition-num=3,topic分区数为3,同步分区数为3个
2、partition-num=2,topic分区数为3,同步分区数为2个
3、partition-num=1,topic分区数为3,同步分区数为1个

4、partition-num=2,topic分区数为2,同步分区数为2个
5、partition-num=1,topic分区数为2,同步分区数为1个

kafka那边也要调整的把

kafka需要调整啥呢?是分区数吗?

假设kafka有10个分区,我只想同步其中的1个分区,那么设置partition-num=1,就应该可以实现这个需求了。
实际上4.0.15的确已经实现了这个需求。
但是7.1.1这个参数却突然失效了。

从你的截图中可以看出,高版本的同步分区数是以topic分区数为主的,partition-num和topic分区数不一致时,如果partition-num小于topic数量,那么该参数无效。低版本则以partition-num为主。你可以把partition-num参数的值设大一些,超过topic分区数你在看下不同版本间同步数是多少

都报错了,提示设置的partition-num数量大于kafka的topic分区数,报错内容是一样的:
[CDC:ErrKafkaNewSaramaProducer][CDC:ErrKafkaInvalidPartitionNum]the number of partition (5) specified in sink-uri is more than that of actual topic (3)

如果真像你测试的结果那样,这个肯定是bug。可以提下issues

从你的报错信息看partition-num超过了topic的数量了,估计这个值最大不能超过topic的值,高版本的集群可能这块有问题,你可以咨询下官方人员

已提issue:https://github.com/pingcap/tidb/issues/47947
感谢各位!

https://github.com/pingcap/tiflow/blob/v7.1.1/pkg/sink/kafka/options.go#L196C1-L203C1

正常情况下,应该能看到一个Warn级别的日志。

number of partition specified in sink-uri is less than that of the actual topic.
Some partitions will not have messages dispatched to

这些内容有吗?如果没有的话,看看ticdc版本和tidb版本是否一致?

日志里出现这个warning了。

1 个赞

多谢您反馈这个问题, 该问题已 transfer 至 tiflow repo 继续跟进。
https://github.com/pingcap/tiflow/issues/9952

1 个赞

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。

image
这个问题会在 7.1.6 的版本上修复