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

build status codecov maven license average time to resolve an issue percentage of issues still open

[](#%E8%83%8C%E6%99%AF)背景

早期,阿里巴巴 B2B 公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求 ,主要是基于trigger的方式获取增量变更。从 2010 年开始,公司开始逐步尝试数据库日志解析,获取增量变更进行同步,由此衍生出了增量订阅和消费业务,从此开启一段新纪元。

当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

基于日志增量订阅和消费的业务包括

  • 数据库镜像
  • 数据库实时备份
  • 索引构建和实时维护(拆分异构索引、倒排索引等)
  • 业务 cache 刷新
  • 带业务逻辑的增量数据处理

[](#%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D)项目介绍

[](#%E5%90%8D%E7%A7%B0canal-k%C9%99n%C3%A6l)名称:canal [kə'næl]

[](#%E8%AF%91%E6%84%8F-%E6%B0%B4%E9%81%93%E7%AE%A1%E9%81%93%E6%B2%9F%E6%B8%A0)译意: 水道/管道/沟渠

[](#%E4%BA%A7%E5%93%81%E5%AE%9A%E4%BD%8D-%E5%9F%BA%E4%BA%8E%E6%95%B0%E6%8D%AE%E5%BA%93%E5%A2%9E%E9%87%8F%E6%97%A5%E5%BF%97%E8%A7%A3%E6%9E%90%E6%8F%90%E4%BE%9B%E5%A2%9E%E9%87%8F%E6%95%B0%E6%8D%AE%E8%AE%A2%E9%98%85%E5%92%8C%E6%B6%88%E8%B4%B9)产品定位: 基于数据库增量日志解析,提供增量数据订阅和消费

[](#%E5%85%B3%E9%94%AE%E8%AF%8D-mysql-binlog-parser--real-time--queuetopic--index-build)关键词: MySQL binlog parser / real-time / queue&topic / index build

[](#%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86)工作原理

[](#mysql%E4%B8%BB%E5%A4%87%E5%A4%8D%E5%88%B6%E5%8E%9F%E7%90%86)MySQL主备复制原理

  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

[](#canal-%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86)canal 工作原理

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

[](#%E9%87%8D%E8%A6%81%E7%89%88%E6%9C%AC%E6%9B%B4%E6%96%B0%E8%AF%B4%E6%98%8E)重要版本更新说明

  1. canal 1.1.x 版本(release_note),性能与功能层面有较大的突破,重要提升包括:
  1. canal 1.1.4版本,迎来最重要的WebUI能力,引入canal-admin工程,支持面向WebUI的canal动态管理能力,支持配置、任务、日志等在线白屏运维能力,具体文档:Canal Admin Guide

[](#%E6%96%87%E6%A1%A3)文档

[](#%E5%A4%9A%E8%AF%AD%E8%A8%80)多语言

canal 特别设计了 client-server 模式,交互协议使用 protobuf 3.0 , client 端可采用不同语言实现不同的消费逻辑,欢迎大家提交 pull request

canal 作为 MySQL binlog 增量获取和解析工具,可将变更记录投递到 MQ 系统中,比如 Kafka/RocketMQ,可以借助于 MQ 的多语言能力

[](#%E7%9B%B8%E5%85%B3%E5%BC%80%E6%BA%90)相关开源

[](#%E9%97%AE%E9%A2%98%E5%8F%8D%E9%A6%88)问题反馈

[](#%E5%85%B6%E4%BB%96%E8%B5%84%E6%96%99)其他资料


Original url: Access
Created at: 2019-09-04 20:03:39
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论