canal+kafka,canal.instance.filter.regex不生效問題解決

問題描述:

? ? ? ?canal+kafka+mysql 的方式進(jìn)行數(shù)據(jù)同步,instance.properties中配置的過濾器不生效canal.instance.filter.regex ,所有表的改動(dòng)都會向kafka發(fā)送消息

問題分析:

1.?canal的問題:配置不正確,版本bug等

2. mysql的binlog的問題:canal不能正確解析binlog中的表名。

參照官方常見問題中的解決方案,一項(xiàng)一項(xiàng)的進(jìn)行比對。

1.?過濾器正則表達(dá)式是否正確

????1. All the tables: .* or .*\\..*

? ? 2. All the tables in canal scheme: canal\\..*

? ? 3. Tables starting with canal in canal scheme: canal\\.canal.*

? ? 4. Access a table in canal scheme: canal.test1

2.?mysql配置

? ? [mysqld] ?

????log-bin=mysql-bin #添加這一行就ok?

????binlog-format=ROW #選擇row模式?

????server_id=1 #配置mysql replaction需要定義,不能和canal的slaveId重復(fù)?

3. (因?yàn)槲沂莄anal直接發(fā)kafka略過這條)檢查CanalConnectors是否調(diào)用了subscription(filter)方法。如果是這樣,則過濾器應(yīng)與instance.properties中的canal.instance.filter.regex一致,否則訂閱過濾器將覆蓋實(shí)例中的設(shè)置。請注意,如果用于訂閱的過濾器是。* / .. *,則您已消耗了所有更新的數(shù)據(jù)。

4.?看instance的啟動(dòng)日志中,過濾器是否設(shè)置正確

日志目錄/canal目錄/logs/example/example.log

c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table filter :^.*\..*$

c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table black filter :

以上都檢查之后,問題還是沒有解決。

之前在其他環(huán)境部署過canal ,這個(gè)環(huán)境的過濾器是好用的,隨后比較兩個(gè)環(huán)境canal的配置文件,并下載最新的canal1.1.5,重新配置canal,還是不行。把其他環(huán)境的canal修改配置拿過來運(yùn)行還是不行。所以感覺不是不是canal的配置問題,把注意力轉(zhuǎn)移到mysql的binlog上,比較兩個(gè)環(huán)境mysql產(chǎn)生binlog文件的內(nèi)容,發(fā)現(xiàn)一個(gè)binlog中有執(zhí)行的sql,一個(gè)沒有執(zhí)行的sql,有執(zhí)行sql的環(huán)境,canal過濾器不起作用。

隨后修改mysql的配置文件/etc/my.cnf? 將binlog中的sql去掉,問題解決!

binlog中的sql可能影響了canal對binlog中表名的解析。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容