Canal使用小結
之前公司存在mysql數據同步mongo的需求,可以有多種實現方式,比如硬編碼,發送消息等。公司選擇的是Canal中間件,最近有空來研究下他的使用方式,對於mysql數據變更監聽有需求的應用場景都可以使用它。
參考:https://yq.aliyun.com/articles/14570
-
Canal介紹
canal源碼地址:https://github.com/alibaba/canal
-
下載安裝server
先去https://github.com/alibaba/canal/releases下載最新版本的canal.deployer,解壓后配置conf/example/instance.properties文件為自己的配置主要為數據庫的ip端口和連接的用戶和密碼。這里創建一個repication權限的用戶。
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON . TO 'canal'@'%' ;
FLUSH PRIVILEGES;
3. 啟動canal server
執行bin/startup.sh,查看日志logs/canal/canal.log是否成功。
4. 啟動canal client
這里使用上面源碼里的SimpleCanalClientTest測試類(直連方式)。
```
CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(ip, 11111),
destination,
"",
"");
設置canal server的ip和port,還有一個destination參數。
destination對應的是canal server的instance,默認是example,它代表一個完整的監聽實例,這里如果有多個連接example實例的client,則只有一個client能獲取mysql的數據變更通知。所以要想不同的應用都獲取變更通知,則需要連接不同的instance,再此我們可以在canal server復制一個conf/example文件夾,並重命名為example1即可。
-
測試代碼
我自己這邊fork了代碼,地址:https://github.com/yaojf/canal,並且新增了同步redis的測試類,參考自http://blog.csdn.net/stubborn_cow/article/details/50371405,運行ClientSample測試類即可。