一、Canal简介
官网介绍:
“canal,主要用途为基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。”
早期阿里巴巴设立杭州和美国双机房部署,却存在跨机房同步的业务需求,主要的实现方式是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取”增量变更”进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
基于日志增量订阅和消费的业务包括:
数据库镜像
数据库实时备份
索引构建和实时维护(拆分异构索引、倒排索引等)
业务 cache 刷新
带业务逻辑的增量数据处理
当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x。
解读:我们可以把 canal 理解为一个用来同步MySQL增量数据的一个工具。
二、工作原理
1、MySQL主备复制原理
MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
2、canal 工作原理
canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
canal 解析 binary log 对象(原始为 byte 流)
解读:canal的工作原理是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Master发送 dump协议,MySQL master收到canal发送过来的dump请求,就把binlog给canal,然后canal解析binlog,再发送到目标库,比如MySQL、Kafka、ES等。
三、总结
canal 的好处在于对业务代码没有侵入,因为是基于监听 binlog 日志去进行同步数据的。能做到准实时,是一种比较常见的数据同步的方案。
实际项目中是 MQ 模式,配合 RocketMQ 或者 Kafka,canal 会把数据发送到 MQ 的 topic 中,然后通过消息队列的消费者进行处理。
微信公众号:数字化智能运营平台 400-0380-010
官网介绍:
“canal,主要用途为基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。”
早期阿里巴巴设立杭州和美国双机房部署,却存在跨机房同步的业务需求,主要的实现方式是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取”增量变更”进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
基于日志增量订阅和消费的业务包括:
数据库镜像
数据库实时备份
索引构建和实时维护(拆分异构索引、倒排索引等)
业务 cache 刷新
带业务逻辑的增量数据处理
当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x。
解读:我们可以把 canal 理解为一个用来同步MySQL增量数据的一个工具。
二、工作原理
1、MySQL主备复制原理
MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
2、canal 工作原理
canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
canal 解析 binary log 对象(原始为 byte 流)
解读:canal的工作原理是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Master发送 dump协议,MySQL master收到canal发送过来的dump请求,就把binlog给canal,然后canal解析binlog,再发送到目标库,比如MySQL、Kafka、ES等。
三、总结
canal 的好处在于对业务代码没有侵入,因为是基于监听 binlog 日志去进行同步数据的。能做到准实时,是一种比较常见的数据同步的方案。
实际项目中是 MQ 模式,配合 RocketMQ 或者 Kafka,canal 会把数据发送到 MQ 的 topic 中,然后通过消息队列的消费者进行处理。
微信公众号:数字化智能运营平台 400-0380-010