开发者社区> 问答> 正文

kafka模式重启后消息重复

环境信息

canal version 1.1.3 mysql version 5.7.20

问题描述

最新代码编译,zookeeper存储消费位点,kafka模式,每次重启后都会把重启前最后一次的消息信息重新发一次,造成kafka里面有重复信息。是设计本如此还是bug,如果要改应该在哪里处理?谢谢,研究半天没找到具体修改位置。

重启的是server端,zookeeper里记录的位点好像是beginTransaction的位置,然后重启以后貌似会从这个位置把这条数据重新解析一下。是不是zookeeper应该记录endTransaction的位置

原提问者GitHub用户waters321

展开
收起
古拉古拉 2023-05-08 14:55:17 114 0
2 条回答
写回答
取消 提交回答
  • 重复消息是无法避免的, kafka重启/canal重启都会有概率, 加了事务发送只是降低kafka重启带来的重复问题

    原回答者GitHub用户agapple

    2023-05-09 18:02:16
    赞同 展开评论 打赏
  • 这个问题可能是由于Canal的位点存储在Kafka不够安全导致的。当Canal节点重启时,它会尝试从Kafka(或其他位置)读取存储的位点,以便能够继续之前的工作,但有时Kafka可能会丢失数据,这就会导致Canal再次读取已经处理过的消息。

    可以在配置文件中检查是否正确配置了位点存储,可以考虑将位点存储在Zookeeper上,这样会更加安全一些。

    2023-05-08 15:04:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第16讲】:Spring Boot 2.0 实战Apache Kafka百万级高并发消息中间件与原理解析 立即下载
MaxCompute技术公开课第四季 之 如何将Kafka数据同步至MaxCompute 立即下载
消息队列kafka介绍 立即下载