链氪巴士
  1. 首页
  2. 站点导航
  3. 文章
  4. 快讯
  5. 软件
  6. 书刊
  7. 关于

alibaba/canal:阿里巴巴MySQL binlog增量订阅&消费组件

canal是阿里巴巴的MySQL binlog增量订阅与消费组件。早期因双机房部署需求发展而来,它基于MySQL数据库增量日志解析提供增量数据订阅和消费。涵盖数据库镜像、实时备份、索引构建维护等业务。支持多版本MySQL,有多种语言客户端,工作原理基于MySQL主备复制原理,版本...

访问官网 →

【Github】项目名:alibaba/canal – 阿里巴巴MySQL binlog增量订阅&消费组件

项目简介

canal主要用于基于MySQL数据库增量日志解析,提供增量数据订阅和消费。早期因阿里巴巴杭州和美国双机房部署有跨机房同步需求,最初基于业务trigger获取增量变更,自2010年起逐步尝试通过数据库日志解析获取增量变更进行同步,从而衍生出众多数据库增量订阅和消费业务,如数据库镜像、数据库实时备份、索引构建和实时维护(拆分异构索引、倒排索引等)、业务cache刷新、带业务逻辑的增量数据处理等。其支持源端MySQL多个版本,包括5.1.x、5.5.x、5.6.x、5.7.x、8.0.x。

工作原理

基于MySQL主备复制原理,MySQL master将数据变更写入二进制日志(其中记录叫二进制日志事件,可通过show binlog events查看),MySQL slave将master的binary log events拷贝到中继日志,再重放其中事件反映到自己的数据。canal模拟MySQL slave交互协议,伪装成MySQL slave向MySQL master发送dump协议,master收到请求后推送binary log给slave(即canal),canal解析binary log对象(原始为byte流)。

重要版本更新说明

canal 1.1.x版本在性能与功能层面有较大突破,整体性能测试&优化提升了150%,原生支持prometheus监控、kafka消息投递、aliyun rds的binlog订阅(解决自动主备切换/oss binlog离线解析)、docker镜像。canal 1.1.4版本迎来最重要的WebUI能力,引入canal – admin工程,支持面向WebUI的canal动态管理能力,支持配置、任务、日志等在线白屏运维能力。

客户端相关

canal特别设计了client – server模式,交互协议使用protobuf3.0,client端可采用不同语言实现不同的消费逻辑,有java、c#、go、php、Python、Rust、Nodejs等多种语言的客户端可供使用。canal作为MySQL binlog增量获取和解析工具,可将变更记录投递到MQ系统(如Kafka/RocketMQ),借助MQ多语言能力。

项目总结

canal是一个功能强大的MySQL binlog增量订阅和消费组件,在阿里巴巴内部有着丰富的业务需求衍生历程,并且不断更新发展,在很多数据库相关业务场景下有着重要作用。欢迎大家在评论区留言,一起参与对该项目的讨论。

项目地址

GitHub链接直达