canal+kafka,canal.不⽣效问题解决
问题描述:
canal+kafka+mysql 的⽅式进⾏数据同步,instance.properties中配置的过滤器不⽣效canal. ,所有表的改动都会向kafka发送消息
问题分析:
1. canal的问题:配置不正确,版本bug等
2. mysql的binlog的问题:canal不能正确解析binlog中的表名。
参照官⽅常见问题中的解决⽅案,⼀项⼀项的进⾏⽐对。
1. 过滤器正则表达式是否正确
1. All the tables: .* or .*\\..*
2. All the tables in canal scheme: canal\\..*
3. Tables starting with canal in canal scheme: canal\\.canal.*
4. Access a table in canal scheme: st1
2. mysql配置
[mysqld]
log-bin=mysql-bin #添加这⼀⾏就ok
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
3. (因为我是canal直接发kafka略过这条)检查CanalConnectors是否调⽤了subscription(filter)⽅法。如果是这样,则过滤器应与instance.properties中的canal.⼀致,否则订阅过滤器将覆盖实例中的设置。请注意,如果⽤于订阅的过滤器是。* / .. *,则您已消耗了所有更新的数据。
4. 看instance的启动⽇志中,过滤器是否设置正确
⽇志⽬录/canal⽬录/logs/example/example.log
mysql下载starting the anal.parse.inboun
anal.parse.inboun
以上都检查之后,问题还是没有解决。
之前在其他环境部署过canal ,这个环境的过滤器是好⽤的,随后⽐较两个环境canal的配置⽂件,并下载最新的canal1.1.5,重新配置canal,还是不⾏。把其他环境的canal修改配置拿过来运⾏还是不⾏。所以感觉不是不是canal的配置问题,把注意⼒转移到mysql的binlog上,⽐较两个环境mysql产⽣binlog⽂件的内容,发现⼀个binlog中有执⾏的sql,⼀个没有执⾏的sql,有执⾏sql的环境,canal过滤器不起作⽤。
随后修改mysql的配置⽂件/etc/myf  将binlog中的sql去掉,问题解决!
binlog中的sql可能影响了canal对binlog中表名的解析。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。