canal中間件

簡介:

基於數據庫增量(模擬MySQL slave的交互協議)日誌解析,提供增量數據訂閱和消費(客戶端與canal創建關係)mysql

安裝版本:1.1.0
gitgit

環境需求:

  • jdk1.7以上
  • mysql開啓binlog_format=row,並配置mysql slave相關權限。

目錄結構:

[root@wap canal]# tree -L 2 /usr/local/canal
/usr/local/canal
├── bin              #啓動、關閉、重啓命令
│   ├── restart.sh
│   ├── startup.bat
│   ├── startup.sh
│   └── stop.sh
├── conf                  #配置文件目錄
│   ├── canal.properties  #canal程序配置文件
│   ├── example           #數據庫實例配置目錄,一個實例一個目錄
│       │   ├── instance.properties  #每一個實例單獨的配置文件
│   │   └── meta.dat      #記錄binlog相關信息,防止重啓相關信息丟失
│   ├── logback.xml
│   ├── metrics
│   └── spring
├── lib
│   ├── aopalliance-1.0.jar
│   ├── aviator-2.2.1.jar ....
└── logs
    ├── canal        #canal程序自己日誌目錄
    └── example      #鏈接數據庫實例的日誌目錄

配置說明:

conf/canal.properties 主配置文件:

  • canal.id: 每一個canal server實例的惟一標識
  • canal.ip: 服務地址
  • canal.port: 服務端端口,客戶端鏈接
  • canal.zkServers: 集羣時,鏈接zookeeper
  • canal.instance.detecting.enable: 是否開啓心跳檢查
  • canal.instance.detecting.sql: 心跳檢查sql,配置select查詢語句,適用於高可用場景
  • canal.destinations: canal上部署的instance列表,多實例用逗號分隔
  • canal.conf.dir: 配置文件目錄
  • canal.auto.scan: 開啓instance自動掃描,掃描canal.conf.dir目錄下的instance
  • canal.file.data.dir: 持久化數據到file目錄
  • canal.instance.global.spring.xml: 全局的spring配置方式的組件文件,默認選擇基於file持久化模式,用於非HA場景

canal.instance.global.spring.xml配置選項介紹

memory-instance.xml介紹:github

全部的組件(parser , sink , store)都選擇了內存版模式,記錄位點的都選擇了memory模式,重啓後又會回到初始位點進行解析
特色:速度最快,依賴最少(不須要zookeeper)
場景:通常應用在quickstart,或者是出現問題後,進行數據分析的場景,不該該將其應用於生產環境spring

default-instance.xml介紹:sql

store選擇了內存模式,其他的parser/sink依賴的位點管理選擇了持久化模式,目前持久化的方式主要是寫入zookeeper,保證數據集羣共享.
特色:支持HA
場景:生產環境,集羣化部署.數據庫

group-instance.xml介紹:api

主要針對須要進行多庫合併時,能夠將多個物理instance合併爲一個邏輯instance,提供客戶端訪問。
場景:分庫業務。 好比產品數據拆分了4個庫,每一個庫會有一個instance,若是不用group,業務上要消費數據時,須要啓動4個客戶端,分別連接4個instance實例。使用group後,能夠在canal server上合併爲一個邏輯instance,只須要啓動1個客戶端,連接這個邏輯instance便可.ide

conf/example/instance.properties 實例配置

  • canal.instance.mysql.slaveId: slaveid惟一,與mysql serverid不一樣便可。
  • canal.instance.gtidon=false : 是否開啓gtid
  • canal.instance.master.address: 數據庫連接地址
  • canal.instance.master.journal.name: 連接起始的binlog文件
  • canal.instance.master.position: 連接起始的binlog偏移量
  • canal.instance.master.timestamp: 連接時起始的binlog時間戳
  • canal.instance.dbUsername: 數據庫賬號
  • canal.instance.dbPassword: 數據庫密碼
  • canal.instance.connectionCharset: 與數據庫編碼格式一致
  • canal.instance.filter.regex=.\.. :正則匹配庫和表,默認全部庫和表
  • canal.instance.filter.black.regex=mysql..* :過濾掉哪些庫和表,這裏過濾mysql庫的全部表。正則匹配

官網詳細配置說明源碼分析

配置式例:

1. 多實例配置

  1. 打開canal.auto.scan參數,會根據canal.auto.scan.interval定義的頻率,進行掃描
  • 發現目錄有新增,啓動新的instance
  • 發現目錄有刪除,關閉老的instance
  • 發現對應目錄的instance.properties有變化,重啓instance
cp -a conf/example conf/example_1
  1. 關閉canal.auto.scan,在canal.destinations後以逗號分隔配置多實例名稱。
canal.destinations= example,example_1

$ cp -a conf/example conf/example_1
$ ./bin/restart.sh

高可用,集羣相關配置wiki中介紹,請參閱官網
源碼分析ui

相關文章
相關標籤/搜索