问题背景
通过 Canal 增量解析 MySQL Binary Log 发送消息给 Kafka,消息队列中会出现原始的SQL Statement,通过若干配置过滤掉这些原始的SQL Statement,消除对消费端的侵入。
软件环境
MySQL 5.7,binlog_format = row
Kafka 2.4
Canal 1.1.6
流程架构
canal2kafka
问题表现
生产端发起了更新操作(在数据库中的SQL语句是:“UPDATE `NOTIFICATION_SEQUENCE` SET `NEXT_EVENT_ID`=19114652 WHERE `NNI_ID`=1"”),这句SQL在Kafka中的体现:
kafka messagebody 0001
消费端实际只需要如下与之对应的消息内容(数据更新前后的镜像):
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