簡介:
基於數據庫增量(模擬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. 多實例配置
- 打開canal.auto.scan參數,會根據canal.auto.scan.interval定義的頻率,進行掃描
- 發現目錄有新增,啓動新的instance
- 發現目錄有刪除,關閉老的instance
- 發現對應目錄的instance.properties有變化,重啓instance
cp -a conf/example conf/example_1
- 關閉canal.auto.scan,在canal.destinations後以逗號分隔配置多實例名稱。
canal.destinations= example,example_1
$ cp -a conf/example conf/example_1
$ ./bin/restart.sh
高可用,集羣相關配置wiki中介紹,請參閱官網
源碼分析ui