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]。

  博主在使用的时候,场景比较简单,配置也较为简单,目标仅是让整个流程跑起来,对于其他的参数未做详细的了解以及探究,其中不免有错误之处,欢迎留言指正。