1. 工作原理

请参考:https://github.com/alibaba/canal

下面的内容整理自该文档。

1.1. MySQL 主备工作原理

canal-2.jpeg

1.2. canal 工作原理

canal-1.png


2. 集成 Kafka

Canal 作为 MySQL binlog 增量获取和解析工具,可将变更记录投递到 MQ 系统中,比如 Kafka/RocketMQ,可以借助 MQ 的多语言能力。

Read Also:

  1. https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart
2.1. 环境说明
2.2. 修改 MySQL 配置

添加如下配置:

然后重启 MySQL。

添加用户及授权:

2.3. 下载

去官网 releases 页面下载 Canal Deployer,本文选择的版本是 canal-1.1.6。将下载后的压缩包解压,然后复制到如下两个目录:

(用来模拟两个 Canal Server Instance)

2.4. 修改配置文件

在以上两个目录中分别执行下面的操作。

1. 修改 conf/example/instance.properties:

2. 修改 conf/canal.properties:

2.5. 启动

日志在:/usr/local/canal-1/logs/canal/{canal,canal_stdout}.log,在我的测试环境中启动发生错误:

解决方法是将 startup.sh 中的

改为:

然后启动:

说明:

  1. 使用 bin/stop.sh 脚本关闭 Canal
2.6. 测试

JSON 格式的 binlog 示例如下:

2.7. Binlog Position 存储位置

在集群模式下,存储在 Zookeeper 中:

在单点模式下,存储在 conf/example/meta.dat 文件中:


3. MQ 顺序性问题

请参考:https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart#mq%E9%A1%BA%E5%BA%8F%E6%80%A7%E9%97%AE%E9%A2%98


Appendix 1 - 创建虚拟机的 Vagrantfile