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 目录下存放了启停的脚本,使用适当的脚本即可

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