Canal介绍
canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。
canal是应阿里巴巴存在杭州和美国的双机房部署,存在跨机房同步的业务需求而提出的。
阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。
canal主要用途是基于 MySQL 数据库增量日志解析,并能提供增量数据订阅和消费,应用场景十分丰富。
目前canal主要支持mysql数据库。
github地址:https://github.com/alibaba/canal
版本下载地址:https://github.com/alibaba/canal/releases
文档地址:https://github.com/alibaba/canal/wiki/Docker-QuickStart
Canal应用场景
1)、电商场景下商品、用户实时更新同步到至Elasticsearch、solr等搜索引擎;
2)、价格、库存发生变更实时同步到redis;
3)、数据库异地备份、数据同步;
4)、代替使用轮询数据库方式来监控数据库变更,有效改善轮询耗费数据库资源。


MySQL主从复制原理
1)、MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
2)、MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
3)、MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
Canal工作原理
-
canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议
-
MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
-
canal 解析 binary log 对象(原始为 byte 流)

Canal安装
参考文档:https://github.com/alibaba/canal/wiki/QuickStart
Canal配置
mq相关参数说明 (>=1.1.5版本)
在1.1.5版本开始,引入了MQ Connector设计,参数配置做了部分调整
| 参数名 |
参数说明 |
默认值 |
|---|---|---|
| canal.aliyun.accessKey |
阿里云ak |
无 |
| canal.aliyun.secretKey |
阿里云sk |
无 |
| canal.aliyun.uid |
阿里云uid |
无 |
| canal.mq.flatMessage |
是否为json格式 如果设置为false,对应MQ收到的消息为protobuf格式 需要通过CanalMessageDeserializer进行解码 |
false |
| canal.mq.canalBatchSize |
获取canal数据的批次大小 |
50 |
| canal.mq.canalGetTimeout |
获取canal数据的超时时间 |
100 |
| canal.mq.accessChannel = local |

本文介绍了Canal,一种用于MySQL数据库增量日志解析的工具,用于实现实时数据同步,支持电商、价格同步、数据库备份等多种场景。文章详细讲解了Canal的工作原理、安装配置以及与Kafka和RocketMQ的集成,涉及主从复制原理和MQ连接参数调整。
最低0.47元/天 解锁文章
717

被折叠的 条评论
为什么被折叠?



