Canal使用小結


Canal使用小結

之前公司存在mysql數據同步mongo的需求,可以有多種實現方式,比如硬編碼,發送消息等。公司選擇的是Canal中間件,最近有空來研究下他的使用方式,對於mysql數據變更監聽有需求的應用場景都可以使用它。

參考:https://yq.aliyun.com/articles/14570

  1. Canal介紹

    基於mysql數據庫binlog的增量訂閱&消費

    canal源碼地址:https://github.com/alibaba/canal

  2. 下載安裝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即可。
  1. 測試代碼

    我自己這邊fork了代碼,地址:https://github.com/yaojf/canal,並且新增了同步redis的測試類,參考自http://blog.csdn.net/stubborn_cow/article/details/50371405,運行ClientSample測試類即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM