項目案例:https://github.com/liujun19921020/SpringCloudDemo/tree/master/alibaba/canal
MySQL
MySQL 需開啓 binlog 寫入功能,並配置 binlog-format 爲 ROW 模式
[mysqld]
log-bin=mysql-bin # 開啓 binlog
binlog-format=ROW # 選擇 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定義,不要和 canal 的 slaveId 重複
創建 canal 賬號,用於 canal 連接 MySQL, 該賬號必須具有作爲 MySQL slave 的權限,如使用已有賬戶,可直接使用 grant 命令授權
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
Zookeeper 安裝
安裝:(略)
用途:支撐 CANAL HA,如不採用集羣配置,無需安裝 Zookeeper
Kafka 安裝
安裝:(略)
用途:支撐 Kafka MQ 同步方案,如果採用 TCP 或 Rabbit MQ 方式,無需安裝 Kafka
RabbitMQ 安裝
安裝:(略)
用途:支撐 Rabbit MQ 同步方案,如果採用 TCP 或 Kafka 方式,無需安裝 Rabbit MQ
ES 安裝(略)
CANAL
可使用阿里 Github 倉庫的,已經打包好的
wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.deployer-1.1.3.tar.gz
也可使用我們 fork 的版本,需要手動構建,因爲打包好的沒有上傳,後面再說明構建細節,代碼倉庫 直通車 ,本文直接使用阿里的
mkdir -p ~/canal/server
tar zxvf canal.deployer-1.1.3.tar.gz -C ~/canal/server
配置文件:
canal.port:CANAL 服務端口
canal.metrics.pull.port:CANAL 狀態監視端口
canal.zkServers:zookeeper 端口列表,英文逗號分隔,如果單例,此項留空
canal.serverMode:服務模式,有 tcp, kafka, RocketMQ 三種
canal.destinations:實例列表,conf 目錄下實例目錄名稱,英文逗號隔開
canal.instance.global.spring.xml:對應 conf/spring/ 目錄下文件,其中定義了 CANAL 服務的組件,根據不同需要選擇,只有 default-instance.xml 支持 HA
canal.mq.servers:MQ 服務地址及端口,目前不支持 zookeeper 高可用集羣配置,請指定具體 MQ 服務地址及端口以
canal.instance.master.address:數據庫地址及端口
canal.instance.dbUsername:用戶名
canal.instance.dbPassword:密碼
canal.mq.topic:MQ 的 topic
以上是比較重要的配置項,其它配置可保持默認,有需要再行修改
CANAL ADAPTER
目前使用 ES ADAPTER 插件,該插件同屬於 CANAL 項目,但是其實現有 BUG,所以我們在內部倉庫中創建了一個 CANAL 項目,需要通過源碼構建項目得到可執行包,項目鏈接 CANAL 源碼 ,構建 launcher 模塊,並將生成的 target 目錄下的 canal-adapter 文件夾打包上傳至服務器,此目錄結構與阿里的發佈包結構一致
配置文件:
canal.conf.mode:服務模式,同樣對應 tcp,kafka,rocketMQ 三種
canal.conf.zookeeperHosts:CANAL 所在的 zookeeper 列表,英文逗號隔開
canal.conf.mqServers:MQ 服務地址,與 CANAL 中配置一致
canal.conf.srcDataSources.zyloopsDS:數據源配置
canal.conf.canalAdapters.instance:CANAL 實例名稱
cluster.name:ES 集羣名稱,必須與 ES 中的 cluster.name 名稱絕對一致
searchguard.ssl.transport:Search Guard 的 SSL 證書及密鑰配置,請使用絕對路徑
es 目錄下的文件爲適配器實例定義文件,該文件定義了數據如何映射至 ES,以及連接哪個 CANAL 實例,文件名稱沒有限制
dataSourceKey: zyloopsDS
destination: zyloops
groupId: g1
esMapping:
_index: zyloops_user
_type: _doc
_id: _id
upsert: true
sql: "select a.id as _id, a.name as _name, a.age as _age, b.name as _clzName, c.score as _score from t_user a left join t_clz b on a.id = b.user_id left join t_score c on a.id = c.user_id"
commitBatch: 3000
啓停
CANAL 及 ADAPTER 都在 bin 目錄下存放了啓停的腳本,使用適當的腳本即可