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

Sunxien® 50a570290a fix(canal/client-adapter): 修复adapter插件重试错误缺陷 (#5427) 1 month ago
.github df86f94409 fixed issue template 6 years ago
.mvn e7b81cd83a fixed mvn wrapper 6 years ago
admin c15129b0ac [maven-release-plugin] prepare for next development iteration 5 months ago
charts 44ed76ebb8 fix typo (#5299) 6 months ago
client c15129b0ac [maven-release-plugin] prepare for next development iteration 5 months ago
client-adapter 50a570290a fix(canal/client-adapter): 修复adapter插件重试错误缺陷 (#5427) 1 month ago
common e21e98aa83 fixed CanalAdmin instanceLog and polardbx columnar test 3 months ago
connector b153e61f0d fix issue #5401 (#5402) 1 month ago
dbsync dad209feb8 fixed issue #5453 , skipping Query_log_event by unknown status vars 1 month ago
deployer e101287c25 fix(canal/startup.sh): 修复生产环境ZK启用sasl安全认证 (#5438) 1 month ago
docker 923675aa49 fixed issue #5334 , adjust canal_manager default schema 6 months ago
driver 2b53164253 解决8.0.30+使用cahcing_sha2_password时Fastauth报错问题 (#5406) 1 month ago
example c15129b0ac [maven-release-plugin] prepare for next development iteration 5 months ago
filter c15129b0ac [maven-release-plugin] prepare for next development iteration 5 months ago
images 5588da59b9 Update response time image. 6 years ago
instance c15129b0ac [maven-release-plugin] prepare for next development iteration 5 months ago
meta c15129b0ac [maven-release-plugin] prepare for next development iteration 5 months ago
parse 9bd4357f37 fix: tsdb存储元数据时支持大对象(大于64M) (#5393) 1 month ago
prometheus 6b7ddbbe92 fix(canal/prometheus): 修复延迟指标的缺陷 (#5426) 1 month ago
protocol c15129b0ac [maven-release-plugin] prepare for next development iteration 5 months ago
server c15129b0ac [maven-release-plugin] prepare for next development iteration 5 months ago
sink c15129b0ac [maven-release-plugin] prepare for next development iteration 5 months ago
store c15129b0ac [maven-release-plugin] prepare for next development iteration 5 months ago
.codecov.yml 8cb85753bb open the switch to get codecov test coverage (#1671) 6 years ago
.gitignore 50a570290a fix(canal/client-adapter): 修复adapter插件重试错误缺陷 (#5427) 1 month ago
.travis.yml eef3bd92ba Improve MAVEN build Performance (#3851) 3 years ago
LICENSE.txt a0defe575b init 10 years ago
README.md fb35dd4254 Update README.md 1 year ago
RELEASE.txt a0defe575b init 10 years ago
codeformat.xml 7ebb3fd1ab fixed code template and format 10 years ago
codetemplates.xml 7ebb3fd1ab fixed code template and format 10 years ago
logo.png 3b9ff26d1a add logo 6 years ago
mvnw 2810e7e815 add mvnw 6 years ago
pom.xml e101287c25 fix(canal/startup.sh): 修复生产环境ZK启用sasl安全认证 (#5438) 1 month ago

README.md

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

简介

canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

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

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

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

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

工作原理

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 流)

重要版本更新说明

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

文档

多语言

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

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

基于canal开发的工具

相关开源&产品

问题反馈

本项目的Issues会被同步沉淀至阿里云开发者社区