Canal 學習

Canal 官方介紹

Canal 安裝

版本

  • Java 1.8
  • canal.deployer-1.1.4.tar.gz
  • zookeeper-3.4.5-cdh5.7.0.tar.gz

提醒

  • Canal 是一個需要運行在 java 環境裏的程序
  • Canal 安裝前後記得關閉防火牆,或者開放相應端口
  • 單機模式,file-instance.xml,這樣才能在 conf/example 的目錄下看到 meta.dat,如果有 position 相關問題,刪除 meta.dat,重啓 canal 即可恢復。
  • 集羣模式,default-instance.xml,binlog 的 position 相關都在 zookeeper 集羣中,如果有 position 相關問題,可以刪除節點/otter/canal/destinations/xxxxx/1001/cursor ,重啓 canal 即可恢復。

單實例

材料

  • 單 canal server
  • 單 canal client,CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(ip, 11111), destination, "", "");
  • 官方安裝文檔

簡單說

  • 單服務的 Canal Server 就不用依靠 Zookeeper 集羣了。

集羣實例

材料

簡單說

  • Canal 的集羣搭建是依賴 Zookeeper 集羣的,所以應該先搭建 Zookeeper 集羣

故障轉移

注意,因爲 Canal Client 要連接的是一個 Canal Instance,因此兩臺機器上的 Instance 目錄的名字需要保證完全一致,HA模式是依賴於 Instance Name 進行管理。

Canal 集羣在依賴 Zookeeper 集羣成功啓動後,實際上是隻有一個 Canal Server 在運作,這是 Canal 自己的設計,主要是爲了防止對數據庫多次 dump。既然是集羣,那麼在當前運作的 Canal Server 停止後,會有下一個 Canal Server 繼續生效,只不過,如果不通過 MQ 的話,對於客戶端來說,這是一個快速恢復的方案,而不是故障轉移

TSDB

細心的同學可能會注意到配置文件裏帶有tsdb,這麼個關鍵詞的配置。他是一種時序表結構方案的設計,解釋來講就是用來解決 Canal 集羣下每當發生 DDL 的時候,dump 下來的 binlog 裏面的字段可能匹配不上的情況。

我這裏建議用 mysql 的方式進行配置。值得注意的是,官方給出了 h2 和 mysql 兩種方式,這兩種配置的地方分別在全局通用的 canal.properties 裏和具體某實例的 instance.properties 裏。雖然在兩個地方,但是具體配置項基本都是重複的,只有 url 這一項不同,所以提醒大家,在配置 mysql 的時候,記得將全局的隱掉,只保留全局的 enable 即可。

集羣實例(帶 Kafka 集羣)

材料

  • 修改部分 instance.properties,尤其注意打開canal.mq.dynamicTopic ,否則,要麼接收不到,要麼接收到的消息可能是莫名其妙的樣子
  • 修改部分 canal.properties
  • canal client,KafkaCanalConnector connector = new KafkaCanalConnector(kafkaServers, "example", partition, groupId, null, false);
  • 具體參考集羣實例的安裝方法

簡單說

  • 相比上面的集羣實例,就是多了個 Kafka 集羣,並且改了些配置。

順序性

  • Canal 的順序性可以由 Binlog 保證,因爲 Binlog 本身就是順序的。
  • Canal 的順序性可以由 Kafka 保證,可以查看這個
  • Canal 的順序性可以由 Zookeeper 集羣保證,可以查看這個

相關命令

zookeeper

./zkServer.sh start #啓動
./zkServer.sh status #查看狀態

./zkCli.sh #啓動客戶端
ls /otter/canal/cluster #啓動客戶端後,此命令可以實時的查看註冊到 zoo 的 canal server 們
ls /brokers/ids #啓動客戶端後,此命令可以實時的查看註冊到 zoo 的 kafka server 們
ls /brokers/topics #啓動客戶端後,此命令可以查看在此 zoo 集羣中曾經創建過的 topic 們

kafka

可以用同一個 kafka 目錄下的 server.properties 造出三個配置文件,分別指定啓動,就可以是三個 kafka server 了
./kafka-server-start.sh /home/kafka_2.13-2.4.0/config/server-1.properties #啓動 kafka server 1
./kafka-server-start.sh /home/kafka_2.13-2.4.0/config/server-2.properties #啓動 kafka server 2
./kafka-server-start.sh /home/kafka_2.13-2.4.0/config/server-3.properties #啓動 kafka server 3

發佈了29 篇原創文章 · 獲贊 18 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章