首页/数据/数据工程与 ETL 速查/Canal:伪装从库的增量订阅
CDC 与同步53 条

Canal:伪装从库的增量订阅

Canal 是阿里开源的 MySQL binlog 增量订阅组件(Java 实现):把自己伪装成从库,向主库发送 dump 协议请求,收到 binlog 后解析成结构化 Entry(含 RowChange),再投递给客户端或消息队列。在 Debezium/Flink CDC 普及前,它是国内使用较多的 CDC 方案。

定位MySQL binlog 增量订阅与解析组件
原理模拟从库发送 dump 协议,接收 binlog 并解析
输出Entry / RowChange(行级增删改)
投递TCP 客户端拉取,或直接投递 Kafka/RocketMQ 等

数据流向

数据流向
MySQL Master
  →(dump 协议推送 binlog)
Canal Server 解析为 Entry/RowChange
  → Kafka 或 canal client 消费
Canal 依赖 ROW 格式 binlog,并需要独立 slaveId(不与真实从库冲突)。

易错点

  • 给 Canal 配的 slaveId 与真实从库冲突,导致复制报错
  • 直连写入量大的主库不做限流评估,采集高峰挤压业务

数据来源与参考

  • Canal 官方文档(alibaba/canal 原理与架构)
  • Canal GitHub Wiki
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌