环境信息
canal version 1.1.3 mysql version 5.7.20
问题描述
最新代码编译,zookeeper存储消费位点,kafka模式,每次重启后都会把重启前最后一次的消息信息重新发一次,造成kafka里面有重复信息。是设计本如此还是bug,如果要改应该在哪里处理?谢谢,研究半天没找到具体修改位置。
重启的是server端,zookeeper里记录的位点好像是beginTransaction的位置,然后重启以后貌似会从这个位置把这条数据重新解析一下。是不是zookeeper应该记录endTransaction的位置
原提问者GitHub用户waters321
重复消息是无法避免的, kafka重启/canal重启都会有概率, 加了事务发送只是降低kafka重启带来的重复问题
原回答者GitHub用户agapple
这个问题可能是由于Canal的位点存储在Kafka不够安全导致的。当Canal节点重启时,它会尝试从Kafka(或其他位置)读取存储的位点,以便能够继续之前的工作,但有时Kafka可能会丢失数据,这就会导致Canal再次读取已经处理过的消息。
可以在配置文件中检查是否正确配置了位点存储,可以考虑将位点存储在Zookeeper上,这样会更加安全一些。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。