1. 准备工作
1.1. MySQL账号
根据Canal官方说明,需要申请一个MySQL数据库的账号,该账号具有如下权限
CREATE USER canal IDENTIFIED BY 'canal';
-- 至少具有如下权限
GRANT SELECT, SHOW VIEW, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ; -- 需要具有SHOW VIEW 权限
FLUSH PRIVILEGES;
并保证目标主机与MySQL数据库之间3306端口的连通性。
1.2. 安装Java
由于是一个Java程序,因此需要在目标机上事先安装JDK。
1.3. Kafka
本项目目的是将Binlog数据发往Kafka,因此需要一个Kafka集群或单机节点,并保证9092端口的连通性。
1.4. Zookeeper
如果启用高可用,或将元数据保存在Zookeeper上,那么需要保证目标主机与ZK集群之间2181端口的连通性。
2. 配置工作
配置Canal是一个不断摸索的过程,根据Git上面的文档,以及项目源码,如果有问题出现,基本上可以定位到问题出处。虽然Git上面有比较详尽的说明,但在测试时,还是会遇到各种各样的问题。这就需要充分理解相关配置参数的含义,以及参数之间的搭配,才能更好地使用这个工具。
2.1. canal说明
需要特别注意以下几个配置内容
## 配置ZK地址:如果需要启用高可用,目前高可用仅支持同时一个节点工作
canal.zkServers=
## 配置sink方式:目前支持以下三种
### tcp, kafka, RocketMQ
canal.serverMode=
## 并发配置:这里是二选一
### 1. 单线程处理
canal.instance.parser.parallel = false
### 2. 处理过程如下[源代码]
### * 1. 网络接收 (单线程)
### * 2. 事件基本解析 (单线程,事件类型、DDL解析构造TableMeta、维护位点信息)
### * 3. 事件深度解析 (多线程, DML事件数据的完整解析)
### * 4. 投递到store (单线程)
canal.instance.parser.parallel = true
canal.instance.parser.parallelThreadSize = 6
canal.instance.parser.parallelBufferSize = 4096
## MQ配置:配置Kafka的服务器: “IP1:9092,IP2:9092,,,”
canal.mq.servers=
## MQ配置:设置消息序列化方式,true--json, false--protobuf
canal.mq.flatMessage=true
## MQ设置
canal.mq.acks=
canal.mq.lingerMs=
2.2. instance说明
Instance中需要注意的配置项目如下
## GTID设置:如果配置为true,那么需要给出:canal.instance.master.gtid=
## 一般设置为false,小的项目就够了:自动寻找,以及记忆Binlog位置
canal.instance.gtidon=false
## 设置源数据库:用户名、密码、默认数据库
canal.instance.dbUsername=
canal.instance.dbPassword=
canal.instance.defaultDatabaseName =
## Kafka设置
canal.mq.topic=
## 二选一
## 1. 配置partition数量,并配合映射规则:实际代码中,优先判断该种情况
canal.mq.partitionsNum=3
canal.mq.partitionHash=mytest.person:id,mytest.role:id
## 2. 配置为0,或不配置
canal.mq.partition=
3. 注意事项
3.1. 默认数据库
在实际测试中,这个默认数据库的设置不知道起到了什么作用
canal.instance.defaultDatabaseName =
在获取MySQL Binlog时,这个MySQL实例的Binlog都获取到了,并传输到了Kafka中。
3.2. 配置错误
在配置mq.yml文件时,遇到了一个基本常识错误
## 错误配置
canalDestinations:
- canalDestination: example
topic:example
partition:0
## 正确配置
canalDestinations:
- canalDestination: example
topic: example
partition: 0
即在YML配置中,基本上是这种模式的[Key: value]。
博主在使用的时候,场景比较简单,配置也较为简单,目标仅是让整个流程跑起来,对于其他的参数未做详细的了解以及探究,其中不免有错误之处,欢迎留言指正。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!