作者:阿里云数据库产品事业部
高级技术专家 七锋
1.1.3 Release Note
canal是阿里巴巴在2012年开源的基于MySQL数据库增量日志解析,提供增量数据订阅&消费。基于canal的准实时日志订阅消费,你可以完成类似的业务:
1.同步到另一个数据库,比如异地容灾、同步离线库等
2.构建多级索引 (卖家和买家各自分库索引)
3.实时构建搜索引擎,比如同步给elasticsearch
4.业务cache刷新
5.价格变化等重要业务消息
项目开源地址:https://github.com/alibaba/canal。经历了4个月的蛰伏,canal 1.1系列的1.1.3正式发布了,主要围绕自建的生态能力,完善消息投递到MQ和Client Adapter做了比较多的测试和修复工作,具体的变更日志:
功能新增
1.支持mysql8.0新的
- caching_sha2_password认证协议
2.支持Azure MySQL的认证协议
3.canal投递MQ消息
- 支持按表规则定义dynamic topic、partition路由的能力
- 新增kafka消息投递事务
4.canal内置的客户端
rds-adapter 增加mysql整个DB层面的同步配置
es-adapter 新增父子文档索引适配
小需求 & bugfix
- 解决server单核服务器无法接收数据的问题 #1605
- 修复TableMeta TSDB支持utf8mb4 #1550
- 修复MQ消息发送时非flatMessage模式出现数据重复 #1551
- 修复Kafka配置为分区模式时出现数据 #1636
- 修复fastsql的几个DDL解析问题#1306 #1546 # 1626
- 修复rdb-adapter同步的类型转化、空指针、大小写、DDL同步等问#1313 #1338 #1341 #1408 #1433
- 修复投递MQ模式,Canal server HA在切换后不生效 #1229
- 修复es-adapter数据库主键类型错误 #1559
- 修复charset编码不存在 #1662
更多详情,可以参见: https://github.com/alibaba/canal/releases
Canal工作原理
原理相对比较简单:
- canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
- mysql master收到dump请求,开始推送binary log给slave(也就是canal)
- canal解析binary log对象(原始为byte流)
Canal整体架构
说明:
- server代表一个canal运行实例,对应于一个jvm
- instance对应于一个数据队列(1个server对应1..n个instance)
instance模块:
- eventParser(数据源接入,模拟slave协议和master进行交互,协议解析)
- eventSink(Parser和Store链接器,进行数据过滤,加工,分发的工作)
- eventStore(数据存储)
- metaManager(增量订阅&消费信息管理器)
整个canal-server可以有两种交付方式
1.client/server架构,可以独立部署一个canal server进程去抓取MySQL binlog,然后业务代码里启动1个或多个canal client来做消费。优点:开箱即用,运维简单
2.嵌入式架构,允许业务代码里启动canal server直接来做消费。优点:方便和业务系统做集成
canal相比于其他开源的binlog产品,如open-replicator,mysql-binlog-connector-java,Tungsten Replicator,maxwell有比较多的优势:
1.高可用性。canal支持MySQL主备、server和client多个层面的高可用机制,可以作为生产使用
2.跨语言。canal的通讯协议选择了protobuf 3.6.1,client层面目前支持java、c#、go多个语言的客户端
3.整体性。canal支持增量数据投递到MQ,同时引入Client Adpater扩展机制,目前支持rdb、elasticsearch、hbase等目标的写入
Canal应用场景
1.aliyun DRDS(分布式关系型数据库服务),基于canal实现的SQL级别闪回能力正式上线,可以做到单个SQL级别误删的闪回,再也不用担心其他并行SQL业务的数据丢失,相比于传统的备份集恢复 或 基于时间戳闪回 ,SQL闪回可以做更快的RTO和更低的RPO,具体可参见:https://help.aliyun.com/document_detail/108629.html
2.aliyun Log Service(日志服务),通过Binlog订阅数据库增量更新同步到日志服务中,导入下游离线计算或者进行审计,具体可参见:
https://help.aliyun.com/document_detail/64953.html
3.实战 canal实现Mysql到Elasticsearch实时增量同步,具体可参见:实战 | canal 实现Mysql到Elasticsearch实时增量同步