es sync之 canal / adapter 部署

項目案例: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.properties

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 服務地址及端口以

instance.properties

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 文件夾打包上傳至服務器,此目錄結構與阿里的發佈包結構一致

配置文件:

application.yml

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 目錄下存放了啓停的腳本,使用適當的腳本即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章