canal采集分区问题

ERROR com.alibaba.otter.canal.kafka.CanalKafkaProducer - 
Invalid partition given with record: 2 is not in the range [0...1)

错误截图

问题原因:
kafka 的配置文件server.properties中的分区数默认配置是1
num.partitions=1
canal的canal.properties中配置了kafka的模式,相当于生产者
canal.serverMode = kafka
canal的 instance.properties中配置了对应kafka的分区数为4

# hash partition config
canal.mq.partitionsNum=4
#canal.mq.partitionHash=test.table:id^name,.*\\..*
canal.mq.partitionHash=.*\\..*:$pk$

在第一次没有手动创建topic的情况下,启动canal后会自动创建ODS_BASE_DB_C这个主题,会读取kafka的配置,导致这个主题的分区数只有1。
canal获取到动态变化的数据后,发给ODS_BASE_DB_C这个主题,发现和自己instance.properties配置的分区数4对不上,所以就会报错。也就导致kafka没有数据,所以测试消费不到这个主题的数据。
解决办法:
查看指定的topic的详情

kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic ODS_BASE_DB_C 

这是修改topic分区的命令

kafka-topics.sh --bootstrap-server hadoop102:9092 --alter --partitions 4 --topic ODS_BASE_DB_C
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容