第一步:
canal原理是把自己偽裝成一個mysql的從節(jié)點來讀取mysql主庫的binlog日志喜德。
所以需要mysql主庫先開啟binlog日志功能。可以參考其他帖子打開binlog功能。
ps!!!!! 這里有一個非常值得注意的問題就是canal采集到MQ數(shù)據(jù)中使用的是binlog的的row模式
一定要是row模式。并且canal中配置canal.instance.filter.regex 如果配制指定采集某幾個表一定要在mysql中配置binlog_rows_query_log_events是OFF模式的纠永。否則canal中的canal.instance.filter.regex過濾器不生效。
第二步:
canal服務解壓之后
其中canal_local.properties是canal控制臺配置文件
canal.properties 是canal基礎服務配置文件
ht_order_sync文件夾 是canal的服務實例
ht_product_sync文件夾 是canal的服務實例
上面這些是比較關鍵的文件
其中ht_order_sync 和 ht_product_sync 是我自己創(chuàng)建的文件名字可以隨便叫什么都可以
如果是全新的canal解壓之后 有一個example文件那個就是樣例文件园蝠。
我創(chuàng)建了 ht_order_sync 和 ht_product_sync 是因為我有兩個業(yè)務需求是 同步訂單業(yè)務 和 商品業(yè)務 所以創(chuàng)建了兩個實例渺蒿,canal啟動之后會加載自己創(chuàng)建的文件夾。
cd 進入 ht_order_sync文件夾后 如下圖
我們一般需要改的只有 instance.properties 這個文件彪薛。其他文件是記錄binlog的同步位置的文件茂装。刪除之后就重置binlog的采集位置,所以不要輕易刪除善延。
下面打開instance.properties 如下圖
圖中
1 是要采集的mysql的賬號和密碼
2 是要采集的哪張表可以配置全部也可以配置部分我是配置了部分表可以直接寫庫和表名少态,我?guī)烀昧俗兞亢竺嬷v怎么傳進來的
3 是黑明單結合上面那個白名單用的 我固定了采集某幾張表所以不要配置
4 是采集的每一行的變動會發(fā)送到配置的mq的topic中作為mysql的一條改動數(shù)據(jù)(增刪改)
mq數(shù)據(jù)如下圖會包含改動前和改動后的數(shù)據(jù)表名庫名等等。
上圖是我做的一個insert的樣例數(shù)據(jù)易遣,type類型就是insert彼妻,還有update和delete 有字段類型描述
old 是改動前的數(shù)據(jù) 因為insert 操作所以是null 如果是update操作此處會有值 可以做變更監(jiān)聽邏輯
data是當前改動后的數(shù)據(jù)。
上面說的都是具體實例配置
下面貼出canal的實例上層配置文件也就是canal服務配置文件 canal.properties
如下圖. 一張圖截圖放不下放了三張圖
圖上編號
1 是代表canal采集到信息推送到哪里豆茫。tcp是代表可以推送到程序采集模式
如果是mq配置成對應的mq比如 kafka活著rocketmq等等
2 是canal.destinations 掃描上面說的自己創(chuàng)建的實例 配置幾個文件夾掃描幾個
canal.auto.scan = true 的意思是自動掃描自己創(chuàng)建的實例侨歉。
所以應該可以把canal.auto.scan 配置成false然后配置canal.destinations自己創(chuàng)建的文件夾
即可
3 canal.mq.flatMessage = true
關注一下
采集的消息的消息方式之前好像不設置成true沒采集到,已經(jīng)忘了 也需要配置 mq讀取 也使用這個方式揩魂。 可以參考一下官網(wǎng)等等幽邓。
4 配置成了rocketMQ那么就配置 相關的主題等等
結束