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版权协议,转载请附上原文出处链接和本声明。