这是什么?
Canal 是阿里巴巴推出的 MySQL binlog 增量订阅与消费组件。它伪装成 MySQL 从库,从 MySQL 主库拉取 binlog 事件,并让你消费解析后的变更数据,用于缓存刷新、索引构建或数据库同步等场景。
这是我要嵌入的库,还是独立运行的服务?
它是一个独立的客户端-服务端系统:canal server 进程作为伪装的从库与 MySQL 通信,独立的客户端应用(支持 Java、C#、Go、PHP、Python、Rust 或 Node.js)通过 protobuf 3.0 协议连接到它,以消费这些变更。
我要怎么把它跑起来?
按照 QuickStart 指南(或 Docker QuickStart)部署 canal server,将其指向你的 MySQL 主库以开始转储 binlog,然后用你喜欢的语言编写客户端来消费解析后的事件,或直接将其输送到 Kafka/RocketMQ。
我是不是得先配置 MySQL 复制?
是的。Canal 模拟 MySQL 复制协议,因此你的 MySQL 主库必须开启 binlog,并像配置从库一样进行设置,因为 canal 会像真正的从库一样发送转储请求。
它到底支持哪些 MySQL 版本?
目前支持的源端 MySQL 版本为 5.1.x、5.5.x、5.6.x、5.7.x 和 8.0.x;其他版本或大幅改动的 MySQL 分支不保证能正常工作。
一般是谁在用?当初为什么做这个?
它最初是在阿里巴巴内部开发的,用于在杭州和美国的数据中心之间同步数据;主要面向需要数据库镜像、实时备份、搜索索引维护,或由数据库变更驱动缓存失效的团队。
能在 Linux 服务器上正式运行吗?
能。Canal 是一个 Java 服务进程,通常部署在 Linux 上,同时还提供官方 Docker 镜像,便于部署。
Canal 有管理用的网页界面吗?
有。自 1.1.4 版本起,canal 包含 canal-admin 项目,提供 WebUI,可动态管理配置、任务和日志,无需手动修改文件。
Canal 能直接把变更推送到 Kafka 或 RocketMQ 吗?
能。Canal 原生支持将解析后的 binlog 事件直接推送到 Kafka 或 RocketMQ 作为消息投递目标,无需自定义中继客户端。
Canal 支持阿里云 RDS 实例吗?
支持。它原生支持订阅阿里云 RDS for MySQL 的 binlog,还能处理主从自动切换以及离线 OSS binlog 解析等问题。
Canal 自带监控功能吗?
有。Canal 原生支持 Prometheus 指标,开箱即可监控其性能和运行状况。
What are similar projects?
debezium, emqx, airbyte, automq, walshadow, flink-learning, SpringBoot-Labs, electric
Which topics is it in?
change-data-capture, rocketmq, replication, etl, kafka, sync, prometheus, backup, mysql, distributed-systems, monitoring, china

