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