开发者社区> 问答> 正文

canal 多实例启动,某实例会出现起始消费位延后的情况及大量重复消费单条记录

基础资源信息

操作系统版本

uname -mrs Linux 3.10.0-862.14.4.el7.x86_64 x86_64 cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core)

canal 版本

v1.1.2

数据库版本

mysql> select version(); +------------+ | version() | +------------+ | 5.7.22-log | +------------+ 1 row in set (0.00 sec)

jdk 信息

java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

数据流

canal 从mysql 获取数据然后同步到kafka 队列中,其中canal 只部署一个服务,但有 18个 canal 实例。消费过程中的元消息暂存到zk 中。异常实例的数量为1.

排故过程

在维护过程中,发现某实例数据消费大量重复。

登录zk 集群,查看实例当前的消费状态及偏移量 发现实例消费状态及偏移量保持不变。 通过辅助 kibana 验证,一条数据重复次数达2亿多条 跟dba 确认。对应数据库的 binlog 日志未删除。 手动设置异常canal 实例消费状态 设置 canal.instance.master.journal.name + canal.instance.master.position 指定从凌晨开始消费数据,故障复现 注释上一步设置,设置 canal.instance.master.timestamp 指定从凌晨开始消费,故障复现 注释前两部设置, 使用当前状态进行消费数据,故障复现。 观察异常实例的启动日志,发现无论变更其对应实例的配置策略及参数。实例启动时,都从特定的一个 journalName position 开始消费数据,然重复数据是在这个点之后。

备注

每次变更参数后,都会在 zk CLI 删除对应的消费位点 临时解决方案 将异常实例的配置文件夹重命名,然后启动canal 服务。故障未出现。

原提问者GitHub用户MrYueQ

展开
收起
云上静思 2023-05-04 12:41:55 109 0
1 条回答
写回答
取消 提交回答
  • 最新的版本应该是修复过pk NPE的情况,针对flatMessage的情况

    原回答者GitHub用户agapple

    2023-05-05 10:34:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载