且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

What's New | 阿里巴巴Canal开源组件发布v1.1.3版本

更新时间:2022-08-21 21:38:00

What's New | 阿里巴巴Canal开源组件发布v1.1.3版本

作者:阿里云数据库产品事业部

高级技术专家 七锋


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工作原理

What's New | 阿里巴巴Canal开源组件发布v1.1.3版本

原理相对比较简单:

  • canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  • mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  • canal解析binary log对象(原始为byte流)

Canal整体架构

What's New | 阿里巴巴Canal开源组件发布v1.1.3版本

说明:

  • 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相比于其他开源的binlo***品,如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实时增量同步