阿里开源的MySQL 数据库增量日志解析,提供增量数据订阅和消费。

靳光宇 0cf18976d9 Update HbaseSyncService.java (#1936) 6 anni fa
.github df86f94409 fixed issue template 6 anni fa
.mvn e7b81cd83a fixed mvn wrapper 6 anni fa
client d0a83aad27 Support seamless docking with Alibaba Cloud RocketMQ commercial service (#1849) 6 anni fa
client-adapter 0cf18976d9 Update HbaseSyncService.java (#1936) 6 anni fa
common 8cb85753bb open the switch to get codecov test coverage (#1671) 6 anni fa
dbsync adccc0e912 add logger info for query_log_event 6 anni fa
deployer c81034dda3 增加表字段过滤功能 (#1914) 6 anni fa
docker 46b6528273 fixed tablemeta check 6 anni fa
driver 8cb85753bb open the switch to get codecov test coverage (#1671) 6 anni fa
example d0a83aad27 Support seamless docking with Alibaba Cloud RocketMQ commercial service (#1849) 6 anni fa
filter fadfe1d6ca [maven-release-plugin] prepare for next development iteration 6 anni fa
images 5588da59b9 Update response time image. 7 anni fa
instance 8728beb4b6 fixed compile 6 anni fa
meta 8cb85753bb open the switch to get codecov test coverage (#1671) 6 anni fa
parse f04e742f4f #1897 , fix DummyEventStore implements new method (#1932) 6 anni fa
prometheus fadfe1d6ca [maven-release-plugin] prepare for next development iteration 6 anni fa
protocol 4957083493 fixed issue #1897 , memory event store ack null 6 anni fa
server a847660a45 fixed issue #1826 , remove kafka transaction send 6 anni fa
sink f04e742f4f #1897 , fix DummyEventStore implements new method (#1932) 6 anni fa
store 4957083493 fixed issue #1897 , memory event store ack null 6 anni fa
.codecov.yml 8cb85753bb open the switch to get codecov test coverage (#1671) 6 anni fa
.gitignore 8cb85753bb open the switch to get codecov test coverage (#1671) 6 anni fa
.travis.yml 2b8120b6ed update pom 6 anni fa
LICENSE.txt a0defe575b init 11 anni fa
README.md 803c0607d3 Update README.md 6 anni fa
RELEASE.txt a0defe575b init 11 anni fa
codeformat.xml 7ebb3fd1ab fixed code template and format 10 anni fa
codetemplates.xml 7ebb3fd1ab fixed code template and format 10 anni fa
logo.png 3b9ff26d1a add logo 6 anni fa
mvnw 2810e7e815 add mvnw 6 anni fa
pom.xml c81034dda3 增加表字段过滤功能 (#1914) 6 anni fa

README.md

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

背景

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

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

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

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

项目介绍

名称:canal [kə'næl]

译意: 水道/管道/沟渠

产品定位: 基于数据库增量日志解析,提供增量数据订阅和消费

关键词: MySQL binlog parser / real-time / queue&topic / index build

工作原理

MySQL主备复制原理

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

canal 工作原理

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

重要版本更新说明

canal 1.1.x 版本(release_note),性能与功能层面有较大的突破,重要提升包括:

文档

多语言

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

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

相关开源

问题反馈

  • qq交流群: 161559791
  • 邮件交流: jianghang115@gmail.com
  • 新浪微博: agapple0002
  • 报告 issue: github issues

其他资料