开发者社区> 问答> 正文

canal如何实现只监听表字段的变化,对于同一个表中其他字段变化进行忽略。

以下配置内容对整个表的字段都进行了监听,我这边想实现只对指定字段的变化进行监听。如何配置实现呢?

#canal.instance.filter.black.field=

这个配置除了label_name 字段外,表内其他字段发生变化后。通过zookeeper也会监听到。

原提问者GitHub用户yuanshishuju

展开
收起
山海行 2023-04-27 11:11:54 254 0
2 条回答
写回答
取消 提交回答
  • 字段过滤只是把不需要的字段给丢弃,但还是会有event事件

    原回答者GitHub用户agapple

    2023-04-27 20:55:16
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    可以使用canal.instance.filter.regex或canal.instance.filter.rule配置项来实现只监听指定字段的变化,而忽略其他字段的变化。

    使用canal.instance.filter.regex 可以通过正则表达式匹配要监听的字段,具体步骤如下:

    1)在canal.properties中配置canal.instance.filter.regex,指定要匹配的正则表达式。例如,如果只想监听表t1中的id和name字段,可以这样设置:

    canal.instance.filter.regex=^test.(t1.)?(id|name)$

    其中test为数据库名,t1为表名。

    2)在mysql数据库中执行命令:alter table t1 modify id int default 0; alter table t1 modify name varchar(100) default 'test';

    使用canal.instance.filter.rule 可以通过定义过滤规则来实现只监听指定字段的变化,而忽略其他字段的变化。具体步骤如下:

    1)在canal.properties中配置canal.instance.filter.rule,指定过滤规则,例如:

    canal.instance.filter.rule=db1.test1:id,name;db1.test2:id,name;

    表示只监听数据库db1中表test1和test2中的id和name字段。

    2)在mysql数据库中执行命令:alter table test1 modify id int default 0; alter table test1 modify name varchar(100) default 'test';

    注:canal.instance.filter.regex和canal.instance.filter.rule两者只能使用其中一个,不能同时使用。

    2023-04-27 14:53:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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