美文网首页程序猿的进阶屋canal
canal+kafka,canal.instance.filte

canal+kafka,canal.instance.filte

作者: 和所有的烦恼说拜拜 | 来源:发表于2020-10-22 16:02 被阅读0次

    问题描述:

           canal+kafka+mysql 的方式进行数据同步,instance.properties中配置的过滤器不生效canal.instance.filter.regex ,所有表的改动都会向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: canal.test1

    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.instance.filter.regex一致,否则订阅过滤器将覆盖实例中的设置。请注意,如果用于订阅的过滤器是。* / .. *,则您已消耗了所有更新的数据。

    4. 看instance的启动日志中,过滤器是否设置正确

    日志目录/canal目录/logs/example/example.log

    c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table filter :^.*\..*$

    c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table black filter :

    以上都检查之后,问题还是没有解决。

    之前在其他环境部署过canal ,这个环境的过滤器是好用的,随后比较两个环境canal的配置文件,并下载最新的canal1.1.5,重新配置canal,还是不行。把其他环境的canal修改配置拿过来运行还是不行。所以感觉不是不是canal的配置问题,把注意力转移到mysql的binlog上,比较两个环境mysql产生binlog文件的内容,发现一个binlog中有执行的sql,一个没有执行的sql,有执行sql的环境,canal过滤器不起作用。

    随后修改mysql的配置文件/etc/my.cnf  将binlog中的sql去掉,问题解决!

    binlog中的sql可能影响了canal对binlog中表名的解析。

    相关文章

      网友评论

        本文标题:canal+kafka,canal.instance.filte

        本文链接:https://www.haomeiwen.com/subject/czpvmktx.html