[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3914":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":29,"trendingCount":16,"starSnapshotCount":16,"syncStatus":30,"lastSyncTime":31,"discoverSource":32},3914,"canal","alibaba\u002Fcanal","alibaba","阿里巴巴 MySQL binlog 增量订阅&消费组件 ","",null,"Java",29702,7638,1161,1170,0,3,12,33,10,45,"Apache License 2.0",false,"master",true,[],"2026-06-12 02:00:56","[![build status](https:\u002F\u002Ftravis-ci.com\u002Falibaba\u002Fcanal.svg?branch=master)](https:\u002F\u002Ftravis-ci.com\u002Falibaba\u002Fcanal)\n[![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Falibaba\u002Fcanal\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Falibaba\u002Fcanal)\n![maven](https:\u002F\u002Fimg.shields.io\u002Fmaven-central\u002Fv\u002Fcom.alibaba.otter\u002Fcanal.svg)\n![license](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Falibaba\u002Fcanal.svg)\n[![average time to resolve an issue](http:\u002F\u002Fisitmaintained.com\u002Fbadge\u002Fresolution\u002Falibaba\u002Fcanal.svg)](http:\u002F\u002Fisitmaintained.com\u002Fproject\u002Falibaba\u002Fcanal \"average time to resolve an issue\")\n[![percentage of issues still open](http:\u002F\u002Fisitmaintained.com\u002Fbadge\u002Fopen\u002Falibaba\u002Fcanal.svg)](http:\u002F\u002Fisitmaintained.com\u002Fproject\u002Falibaba\u002Fcanal \"percentage of issues still open\")\n[![Leaderboard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCanal-%E6%9F%A5%E7%9C%8B%E8%B4%A1%E7%8C%AE%E6%8E%92%E8%A1%8C%E6%A6%9C-orange)](https:\u002F\u002Fopensource.alibaba.com\u002Fcontribution_leaderboard\u002Fdetails?projectValue=canal)\n\n\n## 简介\n\n![](https:\u002F\u002Fimg-blog.csdnimg.cn\u002F20191104101735947.png)\n\n**canal [kə'næl]**，译意为水道\u002F管道\u002F沟渠，主要用途是基于 MySQL 数据库增量日志解析，提供增量数据订阅和消费\n\n早期阿里巴巴因为杭州和美国双机房部署，存在跨机房同步的业务需求，实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始，业务逐步尝试数据库日志解析获取增量变更进行同步，由此衍生出了大量的数据库增量订阅和消费业务。\n\n基于日志增量订阅和消费的业务包括\n- 数据库镜像\n- 数据库实时备份\n- 索引构建和实时维护(拆分异构索引、倒排索引等)\n- 业务 cache 刷新\n- 带业务逻辑的增量数据处理\n\n当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x\n\n## 工作原理\n\n#### MySQL主备复制原理\n![](http:\u002F\u002Fdl.iteye.com\u002Fupload\u002Fattachment\u002F0080\u002F3086\u002F468c1a14-e7ad-3290-9d3d-44ac501a7227.jpg)\n\n- MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events，可以通过 show binlog events 进行查看)\n- MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)\n- MySQL slave 重放 relay log 中事件，将数据变更反映它自己的数据\n\n#### canal 工作原理\n\n- canal 模拟 MySQL slave 的交互协议，伪装自己为 MySQL slave ，向 MySQL master 发送dump 协议\n- MySQL master 收到 dump 请求，开始推送 binary log 给 slave (即 canal )\n- canal 解析 binary log 对象(原始为 byte 流)\n\n## 重要版本更新说明\n\n1. canal 1.1.x 版本（[release_note](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Freleases)）,性能与功能层面有较大的突破,重要提升包括:\n\n- 整体性能测试&优化,提升了150%. #726 参考: [Performance](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FPerformance)\n- 原生支持prometheus监控 #765 [Prometheus QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FPrometheus-QuickStart)\n- 原生支持kafka消息投递 #695 [Canal Kafka\u002FRocketMQ QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FCanal-Kafka-RocketMQ-QuickStart)\n- 原生支持aliyun rds的binlog订阅 (解决自动主备切换\u002Foss binlog离线解析) 参考: [Aliyun RDS QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002Faliyun-RDS-QuickStart)\n- 原生支持docker镜像 #801 参考: [Docker QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FDocker-QuickStart)\n\n2.  canal 1.1.4版本，迎来最重要的WebUI能力，引入canal-admin工程，支持面向WebUI的canal动态管理能力，支持配置、任务、日志等在线白屏运维能力，具体文档：[Canal Admin Guide](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FCanal-Admin-Guide)\n\n## 文档\n\n- [Home](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FHome)\n- [Introduction](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FIntroduction)\n- [QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FQuickStart)\n  - [Docker QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FDocker-QuickStart)\n  - [Canal Kafka\u002FRocketMQ QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FCanal-Kafka-RocketMQ-QuickStart)\n  - [Aliyun RDS for MySQL QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002Faliyun-RDS-QuickStart)\n  - [Prometheus QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FPrometheus-QuickStart)\n- Canal Admin\n  - [Canal Admin QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FCanal-Admin-QuickStart)\n  - [Canal Admin Guide](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FCanal-Admin-Guide)\n  - [Canal Admin ServerGuide](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FCanal-Admin-ServerGuide)\n  - [Canal Admin Docker](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FCanal-Admin-Docker)\n- [AdminGuide](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FAdminGuide)\n- [ClientExample](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FClientExample)\n- [ClientAPI](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FClientAPI)\n- [Performance](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FPerformance)\n- [DevGuide](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FDevGuide)\n- [BinlogChange(MySQL 5.6)](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FBinlogChange%28mysql5.6%29)\n- [BinlogChange(MariaDB)](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FBinlogChange%28MariaDB%29)\n- [TableMetaTSDB](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FTableMetaTSDB)\n- [ReleaseNotes](http:\u002F\u002Falibaba.github.com\u002Fcanal\u002Frelease.html)\n- [Download](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Freleases)\n- [FAQ](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FFAQ)\n\n## 多语言\n\ncanal 特别设计了 client-server 模式，交互协议使用 protobuf 3.0 , client 端可采用不同语言实现不同的消费逻辑，欢迎大家提交 pull request \n  \n- canal java 客户端: [https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FClientExample](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FClientExample)\n- canal c# 客户端: [https:\u002F\u002Fgithub.com\u002Fdotnetcore\u002FCanalSharp](https:\u002F\u002Fgithub.com\u002Fdotnetcore\u002FCanalSharp)\n- canal go客户端: [https:\u002F\u002Fgithub.com\u002FCanalClient\u002Fcanal-go](https:\u002F\u002Fgithub.com\u002FCanalClient\u002Fcanal-go)\n- canal php客户端: [https:\u002F\u002Fgithub.com\u002Fxingwenge\u002Fcanal-php](https:\u002F\u002Fgithub.com\u002Fxingwenge\u002Fcanal-php)\n- canal Python客户端：[https:\u002F\u002Fgithub.com\u002Fhaozi3156666\u002Fcanal-python](https:\u002F\u002Fgithub.com\u002Fhaozi3156666\u002Fcanal-python)\n- canal Rust客户端：[https:\u002F\u002Fgithub.com\u002Flaohanlinux\u002Fcanal-rs](https:\u002F\u002Fgithub.com\u002Flaohanlinux\u002Fcanal-rs)\n- canal Nodejs客户端：[https:\u002F\u002Fgithub.com\u002Fmarmot-z\u002Fcanal-nodejs](https:\u002F\u002Fgithub.com\u002Fmarmot-z\u002Fcanal-nodejs)\n\ncanal 作为 MySQL binlog 增量获取和解析工具，可将变更记录投递到 MQ 系统中，比如 Kafka\u002FRocketMQ，可以借助于 MQ 的多语言能力 \n\n- 参考文档: [Canal Kafka\u002FRocketMQ QuickStart](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fwiki\u002FCanal-Kafka-RocketMQ-QuickStart)\n\n## 基于canal开发的工具\n\n-  canal2sql(基于binlog生成SQL) : [https:\u002F\u002Fgithub.com\u002Fzhuchao941\u002Fcanal2sql]\n\n## 相关开源&产品\n\n- [canal 消费端开源项目: Otter](http:\u002F\u002Fgithub.com\u002Falibaba\u002Fotter)\n- [阿里巴巴去 Oracle 数据迁移同步工具: yugong](http:\u002F\u002Fgithub.com\u002Falibaba\u002Fyugong)\n- [阿里巴巴离线同步开源项目 DataX](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fdatax)\n- [阿里巴巴数据库连接池开源项目 Druid](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fdruid)\n- [阿里巴巴实时数据同步工具 DTS](https:\u002F\u002Fwww.aliyun.com\u002Fproduct\u002Fdts)\n\n## 问题反馈\n- 报告 issue: [github issues](https:\u002F\u002Fgithub.com\u002Falibaba\u002Fcanal\u002Fissues)\n\n本项目的Issues会被同步沉淀至[阿里云开发者社区](https:\u002F\u002Fdeveloper.aliyun.com\u002Fask)\n","Canal是阿里巴巴开发的一个用于MySQL binlog增量订阅和消费的组件。它通过模拟MySQL的主从复制协议，将自身伪装成MySQL的从服务器来获取并解析binlog数据，从而实现对数据库变更信息的实时捕捉。Canal支持多种下游存储系统如Kafka、RocketMQ等，并且具有良好的性能表现，在最新版本中还增加了Prometheus监控集成以及Docker镜像支持等功能。适用于需要进行跨机房数据同步、构建实时索引、业务缓存刷新或基于数据库变化触发特定逻辑处理等多种场景。",2,"2026-06-11 02:57:07","top_language"]