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優化