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