canal 能够经过在instance.properties设置canal.instance.filter.regex,来忽略不关心的数据变动的parse和sink处理,优化性能,同时减小没必要要的存储开销。mysql
canal instance启动时,默认加载instance.properties的canal.instance.filter.regex参数,以后会根据conf/canal/meta.dat文件filter值更新过滤规则。当客户端调用CanalConnector.subscribe(String filter)方法时,instance再次用filter参数更新过滤规则。sql
meta.dat文件以下:ide
{ "clientDatas": [{ "clientIdentity": { "clientId": 1001, "destination": "canal", "filter": "canal\\..*" }, "cursor": { "identity": { "slaveId": -1, "sourceAddress": { "address": "127.0.0.1", "port": 3306 } }, "postion": { "included": false, "journalName": "mysql-bin.000047", "position": 15143, "serverId": 1, "timestamp": 1479809428000 } } }], "destination": "canal" }
因此当你只关心部分库表更新时,设置了canal.instance.filter.regex,必定不要在客户端调用CanalConnector.subscribe(".*\\..*"),否则等于没设置canal.instance.filter.regex。post
若是必定要调用CanalConnector.subscribe(".*\\..*"),那么能够设置instance.properties的canal.instance.filter.black.regex参数添加黑名单,过滤非关注库表。性能
canal版本:1.0.22优化