一、简介
Canal主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x
二、工作原理
MySQL主备复制原理
MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
canal 工作原理
canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
canal 解析 binary log 对象(原始为 byte 流)
三、准备安装包
下载地址,我使用的是1.1.6版本 https://github.com/alibaba/canal/releases/tag/canal-1.1.6 国内的话,可以在绿色聊天软件搜索:程序员朱永胜 关注回复1006领取安装包,不限速下载
deployer包:服务包
admin包:UI管理系统,需要的话可以下载
adapter包:官方提供的客户端,可以实现自动同步
四、启动Canal服务
4.1 下载
最简单的使用,我们只需要安装deplyee包即可,其他的不需要
4.2 新增用户并授权
4.3 配置文件修改
4.3.1 canal.properties
这个配置文件默认即可,无需修改配置
4.3.2 instance.properties
修改mysql地址,要确保已经配置了账号密码并授权
4.4 启动
4.5 确认启动成功
五、安装依赖
<dependencies><dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.client</artifactId><version>1.1.4</version></dependency> </dependencies>
六、运行效果
由于代码比较长,我放到最后了,这里先说下效果。 代码启动后,我们只需要变更任意表里面的数据即可看到控制台打印内容。 数据很清晰,有具体的数据库,表,操作类型,以及字段及修改的值。 到这里基本就算结束了,后续就是根据业务自己推送到ES中。当然,也可以使用官方的adapter推送到ES中。
七、编写客户端代码
测试代码官网地址:https://github.com/alibaba/canal/blob/master/example/src/main/java/com/alibaba/otter/canal/example/AbstractCanalClientTest.java 国内的话,可以在绿色聊天软件搜索:程序员朱永胜 关注回复1007领取代码,不限速下载
6.1 BaseCanalClientTest
6.2 SimpleCanalClientTest
6.3 AbstractCanalClientTest