canal + kafka的采集分区参数
canal.mq.dynamicTopic=topicA:schema1.table1,topicA:schema2.table2 canal.mq.partitionsNum=3 canal.mq.partitionHash=...
我阅读wiki的理解是
topicA 存放canal从 table1和table2增量同步的数据 自动创建topic,且分区数量为3 分区策略是,按表分区,即表数据分开存放在不同的topic分区。
但是测试的结果和我理解的不一样
环境: linux centos 6 canal 1.1.15 mysql 5.7.42 kafka 2.12_2.2.0
case1: 采集table1和table2 到 topicA 符合预期 但是kafka的topicA的分区数量是1, 不符合预期的3. 查看了相关的issue,作者说是kafka的topic要手动创建并指定分区数量 #3339
case2: 于是我手动创建了 topic, 指定分区数量为4
测试2次的结果都是:
数据分布在3个分区内, 每个分区table1和table2的数据都有。
我就疑惑了,canal.mq.partitionsNum是决定 数据分布在多少个分区内吗 canal.mq.partitionHash=... 的效果也没办法理解了。
请路过的大佬的指导下这三个参数的含义,拜谢
================ 附 wiki的部分资料
canal.mq.dynamicTopic -- 例子5:test0:test,test1:test1.test1,指定多个表达式,会将test库的表都发送到test0的topic下,test1.test1的表发送到对应的test1的topic下,其余的表发送到默认的canal.mq.topic值
canal.mq.partitionHash -- 例子5:... ,不指定pk信息的正则匹配,将所有正则匹配的表,对应的hash字段为表名。 按表hash: 一张表的所有数据可以发到同一个分区,不同表之间会做散列 (会有热点表分区过大问题)
canal.mq.dynamicTopic,主要控制是否是单topic还是多topic,针对命中条件的表可以发到表名对应的topic、库名对应的topic、默认topic name canal.mq.partitionsNum、canal.mq.partitionHash,主要控制是否多分区以及分区的partition的路由计算,针对命中条件的可以做到按表级做分区、pk级做分区等
原提问者GitHub用户zhang5324496
canal.mq.partitionHash的作用是按照哪个列做分区,如果不指定,默认只会发送给其中1个分区
原回答者GitHub用户agapple
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。