前言:最近項目需要監聽MySQL數據變化,並將變化同步到ES中,自己搗鼓了下,利用了Canal、RocketMQ走通了流程,寫個筆記記錄下過程。
一、Mysql開啓bin log,Canal部署
參考Canal官方文檔 https://github.com/alibaba/canal/wiki/QuickStart
example/instance.properties 部分配置說明:
# table regex
canal.instance.filter.regex=a\.b,a\.c
# table black regex
canal.instance.filter.black.regex=
庫表過濾規則,分白名單和黑名單,上面的配置表示 關注a庫的b和c表的變化,默認爲關注所有的
二、RocketMQ安裝,Canal配置RocketMQ模式
參考RocketMQ官方文檔:https://rocketmq.apache.org/docs/quick-start/
RocketMQ Broker配置看這裏:https://blog.csdn.net/qq_32020035/article/details/81834903
Broker文件位置:conf/broker.conf
使用指定的文件啓動 Broker的命令爲
nohup sh bin/mqbroker -c conf/broker.conf &
啓動完成後,在bin目錄下執行以下命令,檢查NameServer和Broker是否正常工作
sh mqadmin clusterList -n localhost:9876
#執行結果如下
#Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
DefaultCluster broker-a 0 172.17.10.100:10911 V4_4_0 0.00(0,0ms) 0.00(0,0ms) 0 435128.07 0.3271
配置Canal投遞消息到RocketMQ:https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart
分別安裝 Kafka+ZooKeeper 或者 NameServer+RocketMQ,然後對Canal進行配置
整個過程記得隨時看日誌看是否存在報錯
三、Canal Java客戶端
還是參考官方文檔:https://github.com/alibaba/canal/wiki/ClientExample
補充說明:
// 創建鏈接
CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(AddressUtils.getHostIp(),
11111), "example", "", "");
這裏需要填入 Canal Server的IP和端口號,從 conf/canal.properties 查看
這裏的 example 入參 和conf目錄下的相對應,即 如果還需要監聽其他的數據庫,則 在conf目錄下新建目錄 example1,裏面放入 instance.properties,配置對應的 數據庫用戶名和密碼,然後在客戶端 填入對應參數即可開啓監聽。
四、RocketMQ Java客戶端
還是看官方文檔:https://rocketmq.apache.org/docs/simple-example/
最後,操作下對應的數據庫,然後看消費者是否能收到消息即可。