本文講解canal中的一些配置含義。
一、配置加載圖
二、配置文件canal.properties
2.1 common參數定義
比如可以將instance.properties的公用參數,抽取放置到這里,這樣每個instance啟動的時候就可以共享. 【instance.properties配置定義優先級高於canal.properties】
參數名 | 含義 | 默認值 |
---|---|---|
canal.id | 每個canal server實例的唯一標識,暫無實際意義 | 1 |
canal.ip | canal server綁定的本地IP信息,如果不配置,默認選擇一個本機IP進行啟動服務 | 無 |
canal.port | canal server提供socket服務的端口 | 11111 |
canal.zkServers | canal server鏈接zookeeper集群的鏈接信息,例子:127.0.0.1:2181,127.0.0.1:2182 | 無 |
canal.zookeeper.flush.period | canal持久化數據到zookeeper上的更新頻率,單位毫秒 | 1000 |
canal.file.data.dir | canal持久化數據到file上的目錄 | ../conf (默認和instance.properties為同一目錄,方便運維和備份),如果想要HA,不需要配置這個,因為無法通過文件實現高可用 |
canal.file.flush.period | canal持久化數據到file上的更新頻率,單位毫秒 | 1000 |
canal.instance.memory.batch.mode | canal內存store中數據緩存模式:1. ITEMSIZE : 根據buffer.size進行限制,只限制記錄的數量;2. MEMSIZE : 根據buffer.size * buffer.memunit的大小,限制緩存記錄的大小 | MEMSIZE |
canal.instance.memory.buffer.size | canal內存store中可緩存buffer記錄數,需要為2的指數 | 16384 |
canal.instance.memory.buffer.memunit | 內存記錄的單位大小,默認1KB,和buffer.size組合決定最終的內存使用大小 | 1024 |
canal.instance.transactionn.size | 最大事務完整解析的長度支持,超過該長度后,一個事務可能會被拆分成多次提交到canal store中,無法保證事務的完整可見性 | 1024 |
canal.instance.fallbackIntervalInSeconds | canal發生mysql切換時,在新的mysql庫上查找binlog時需要往前查找的時間,單位秒。說明:mysql主備庫可能存在解析延遲或者時鍾不統一,需要回退一段時間,保證數據不丟 | 60 |
canal.instance.detecting.enable | 是否開啟心跳檢查 | false |
canal.instance.detecting.sql | 心跳檢查sql | insert into retl.xdual values(1,now()) on duplicate key update x=now() |
canal.instance.detecting.interval.time | 心跳檢查頻率,單位秒 | 3 |
canal.instance.detecting.retry.threshold | 心跳檢查失敗重試次數 | 3 |
canal.instance.detecting.heartbeatHaEnable | 心跳檢查失敗后,是否開啟自動mysql自動切換。說明:比如心跳檢查失敗超過閥值后,如果該配置為true,canal就會自動鏈到mysql備庫獲取binlog數據 | false |
canal.instance.network.receiveBufferSize | 網絡鏈接參數,SocketOptions.SO_RCVBUF | 16384 |
canal.instance.network.sendBufferSize | 網絡鏈接參數,SocketOptions.SO_SNDBUF | 16384 |
canal.instance.network.soTimeout | 網絡鏈接參數,SocketOptions.SO_TIMEOUT | 30 |
canal.instance.filter.query.dcl | 是否忽略DCL的query語句,比如grant/create user等 | false |
canal.instance.filter.query.dml | 是否忽略DML的query語句,比如insert/update/delete table.(mysql5.6的ROW模式可以包含statement模式的query記錄) | false |
canal.instance.filter.query.ddl | 是否忽略DDL的query語句,比如create table/alater table/drop table/rename table/create index/drop index. (目前支持的ddl類型主要為table級別的操作,create databases/trigger/procedure暫時划分為dcl類型) | false |
canal.instance.filter.druid.ddl | v1.0.25版本新增,是否啟用druid的DDL parse的過濾,基於sql的完整parser可以解決之前基於正則匹配補全的問題,默認為true | true |
canal.instance.get.ddl.isolation | ddl語句是否隔離發送,開啟隔離可保證每次只返回發送一條ddl數據,不和其他dml語句混合返回.(otter ddl同步使用) | false |
canal.instance.binlog.format | 支持的binlogFormat,如果設置會執行強校驗 | 無,可以設置ROW,STATEMENT,MIXED |
canal.instance.binlog.image | 支持的binlogImage,如果設置會執行強校驗 | 無,可以設置為FULL,MINIMAL,NOBLOB |
2.2 instance參數定義
參數名 | 含義 | 默認值 |
---|---|---|
canal.destinations | 當前server上部署的instance列表 | 無,如果要動態生效,不需要進行配置 |
canal.conf.dir | conf/目錄所在的路徑 | ../conf |
canal.auto.scan | 開啟instance自動掃描,如果開啟后,會掃描conf目錄下的文件,進行instance的自動重啟、新增、刪除等動作 | true |
canal.auto.scan.interval | instance自動掃描的間隔時間,單位秒 | 5 |
canal.instance.global.mode | 全局配置加載方式 | spring |
canal.instance.global.lazy | 全局lazy模式 | false |
canal.instance.global.manager.address | 全局的manager配置方式的鏈接信息 | 無,目前加載方式全部為spring,此配置無用 |
canal.instance.global.spring.xml | 全局的spring配置方式的組件文件 | classpath:spring/file-instance.xml (spring目錄相對於canal.conf.dir),我們應該使用default那個xml |
canal.instance.example.mode;canal.instance.example.lazy;canal.instance.example.spring.xml;... | instance級別的配置定義,如有配置,會自動覆蓋全局配置定義模式。命名規則:canal.instance.{name}.xxx | 無 |
canal.instance.tsdb.spring.xml | v1.0.25版本新增,全局的tsdb配置方式的組件文件 | classpath:spring/tsdb/h2-tsdb.xml (spring目錄相對於canal.conf.dir),我們應該用mysql那個 |
三、instance.properties
a. 在canal.properties定義了canal.destinations后,需要在canal.conf.dir對應的目錄下建立同名的文件
比如:
canal.destinations = example1,example2
這時需要創建example1和example2兩個目錄,每個目錄里各自有一份instance.properties.
ps. canal自帶了一份instance.properties demo,可直接復制conf/example目錄進行配置修改
cp -R example example1/
cp -R example example2/
b. 如果canal.properties未定義instance列表,但開啟了canal.auto.scan時
server第一次啟動時,會自動掃描conf目錄下,將文件名做為instance name,啟動對應的instance
server運行過程中,會根據canal.auto.scan.interval定義的頻率,進行掃描
- 發現目錄有新增,啟動新的instance
- 發現目錄有刪除,關閉老的instance
- 發現對應目錄的instance.properties有變化,重啟instance
參數名 | 含義 | 默認值 |
---|---|---|
canal.instance.mysql.slaveId | mysql集群配置中的serverId概念,需要保證和當前mysql集群中id唯一 | 1234 |
canal.instance.master.address | mysql主庫鏈接地址 | 127.0.0.1:3306 |
canal.instance.master.journal.name | mysql主庫鏈接時起始的binlog文件 | 無,默認不需要配置,只有在指定需要重復消費的時候,才需要進行配置 |
canal.instance.master.position | mysql主庫鏈接時起始的binlog偏移量 | 無,同上一個配置 |
canal.instance.master.timestamp | mysql主庫鏈接時起始的binlog的時間戳 | 無,同上一個配置 |
canal.instance.master.gtid | gtid的值 | 無 |
canal.instance.dbUsername | mysql數據庫帳號 | canal |
canal.instance.dbPassword | mysql數據庫密碼 | canal |
canal.instance.defaultDatabaseName | mysql鏈接時默認schema | |
canal.instance.connectionCharset | mysql 數據解析編碼 | UTF-8 |
canal.instance.filter.regex | mysql 數據解析關注的表,Perl正則表達式.多個正則之間以逗號(,)分隔,轉義符需要雙斜杠(\) 。注意:此過濾條件只針對row模式的數據有效。 | 全部表 |
canal.instance.tsdb.enable | v1.0.25版本新增,是否開啟table meta的時間序列版本記錄功能 | true |
canal.instance.tsdb.dir | v1.0.25版本新增,table meta的時間序列版本的本地存儲路徑,默認為instance目錄 | ${canal.file.data.dir:../conf}/${canal.instance.destination:} |
canal.instance.tsdb.url | v1.0.25版本新增,table meta的時間序列版本存儲的數據庫鏈接串,比如例子為本地嵌入式數據庫 | jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;應該改為mysql |
canal.instance.tsdb.dbUsername | v1.0.25版本新增,table meta的時間序列版本存儲的數據庫鏈接賬號 | canal |
canal.instance.tsdb.dbUsername | v1.0.25版本新增,table meta的時間序列版本存儲的數據庫鏈接密碼 | canal |
canal.instance.gtidon | 是否是GTID模式 | false |