天天看点

配置Canal 解析 MySQL Binlog 过滤原始操作语句

作者:明少三年

问题背景

通过 Canal 增量解析 MySQL Binary Log 发送消息给 Kafka,消息队列中会出现原始的SQL Statement,通过若干配置过滤掉这些原始的SQL Statement,消除对消费端的侵入。

软件环境

MySQL 5.7,binlog_format = row

Kafka 2.4

Canal 1.1.6

流程架构

配置Canal 解析 MySQL Binlog 过滤原始操作语句

canal2kafka

问题表现

生产端发起了更新操作(在数据库中的SQL语句是:“UPDATE `NOTIFICATION_SEQUENCE` SET `NEXT_EVENT_ID`=19114652 WHERE `NNI_ID`=1"”),这句SQL在Kafka中的体现:

配置Canal 解析 MySQL Binlog 过滤原始操作语句

kafka messagebody 0001

消费端实际只需要如下与之对应的消息内容(数据更新前后的镜像):

配置Canal 解析 MySQL Binlog 过滤原始操作语句

kafka message body 0002

相同的内容如何去除或过滤前面这条消息呢?

解决方法

在 canal 的 instance 配置文件中添加如下配置

## binlog filter config
canal.instance.filter.query.dcl = true
canal.instance.filter.query.dml = true
canal.instance.filter.query.ddl = true