canal配置canal.instance.filter.regex无效

canal 可以通过在instance.properties设置canal.instance.filter.regex,来忽略不关心的数据变更的parse和sink处理,优化性能,同时减少不必要的存储开销。

canal instance启动时,默认加载instance.properties的canal.instance.filter.regex参数,之后会根据conf/canal/meta.dat文件filter值更新过滤规则。当客户端调用CanalConnector.subscribe(String filter)方法时,instance再次用filter参数更新过滤规则。

meta.dat文件如下:

{
    "clientDatas":[
        {
            "clientIdentity":{
                "clientId":1001,
                "destination":"hm-test",
                "filter":"xxx.*"
            },
            "cursor":{
                "identity":{
                    "slaveId":-1,
                    "sourceAddress":{
                        "address":"xxxx",
                        "port":3306
                    }
                },
                "postion":{
                    "gtid":"",
                    "included":false,
                    "journalName":"mysql-bin.xxx",
                    "position":xxx,
                    "serverId":xxx,
                    "timestamp":1567062470000
                }
            }
        }
    ],
    "destination":"hm-test"
}

所以当你只关心部分库表更新时,设置了canal.instance.filter.regex,一定不要在客户端调CanalConnector.subscribe(".\…"),不然等于没设置canal.instance.filter.regex。

如果一定要调用CanalConnector.subscribe(".\…"),那么可以设置instance.properties的canal.instance.filter.black.regex参数添加黑名单,过滤非关注库表


版权声明:本文为weixin_43947279原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。