canal实战问题汇总分析

canal在实战过程经常会遇到这样或者那样的问题,今天我们专门用一篇文章来列举分析一下,比如、JDK版meta.dat 中保存的位点信息和数据库的位点信息不一致本不匹配、bin-log信息消费失败等问题,下面我们开始一一分析:

1、数据库数据改变了,但是canal 客户端没有监听到,比如:

canal实战问题汇总分析_第1张图片

 服务器连接正常,服务端、客户端配置也正常,那问题出在哪啊?有一个细节需要注意到:

canal实战问题汇总分析_第2张图片数据库点位:

 由于我们在测试验证过程就有meta.dat文件,而且File(mysql-bin.000001)名称中间也换过,因此导致meta.dat 中保存的位点信息和数据库的位点信息不一致,导致canal抓取不到数据库的bin-log数据。

日志验证:

canal实战问题汇总分析_第3张图片

日志报错信息:

canal实战问题汇总分析_第4张图片 核心日志:

com.alibaba.otter.canal.parse.exception.PositionNotFoundException: can't find start position for promotion
2022-12-26 12:05:27.763 [destination = promotion , address = /127.0.0.1:3306 , EventParser] ERROR com.alibaba.otter.canal.common.alarm.LogAlarmHandler - destination:promotion[com.alibaba.otter.canal.parse.exception.PositionNotFoundException: can't find start position for promotion
]

 解决方案:删除meta.dat文件,重启canal,问题解决;

 2、JDK版本过高问题:

我用canal 版本是1.1.6,JDK是11版本,服务端和客户端启动都会报一种错误:

canal实战问题汇总分析_第5张图片

 canal客户端服务启动也会报类似的错误,发现我的JDK版本是11,有点高了;

解决方案:换成JDK1.8就行了。

3、全量数据同步问题:

有时候我们的需求包含把历史数据也同步过去,这样怎么处理呢?首先我们确保以前的历史数据也开启了bin-log日志,即历史数据的bin-log日志存在,这样我们就可以通过设置点位,即偏移量来处理全量数据了,设置如下:修改instance.properties配置文件

 # mysql日志文件
 canal.instance.master.journal.name=mysql-bin.000001
 # 获取日志的起始位置
 canal.instance.master.position=0
 # 获取日志的起始时间戳
 # canal.instance.master.timestamp=1632881068

同时将同级目录的meta.dat删除,因为这个文件记录canal已经消费的位置等信息,删除后从零开始全量同步数据。

4、

5、

6、

你可能感兴趣的:(canal中间件,java)