【Canal源碼分析】配置項


本文講解canal中的一些配置含義。

一、配置加載圖

配置加載.png

二、配置文件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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM