Canal 1.1.8 介绍与选型指南

Canal 1.1.8 介绍与选型指南:阿里开源 MySQL binlog 增量订阅组件的版本基准、server-instance 架构、解析流水线、高可用与消息队列投递、官方 QuickStart 部署示例、适用场景限制,以及对比 Debezium、Maxwell、Flink CDC 的选型分析

Canal2026/10/18

Canal 1.1.8 介绍与选型指南

一、信息基准

查询日期:2026-10-18。 本文版本与功能描述均依据官方公开资料整理,未做本地安装实测。

1.1 版本信息

项目内容
最新稳定版v1.1.8(GitHub Releases,发布时间 2025-01-17)
版本线现状1.1.x 为主线;截至查询日官方 Releases 页未见 2.x 正式版本
开源许可Apache-2.0
代码仓库https://github.com/alibaba/canal
社区规模GitHub stars 约 30k(shields.io 徽标数据,2026-10-18 实查)

1.2 官方来源清单

来源地址用途
GitHub 仓库https://github.com/alibaba/canal源码、Releases、README 总览
官方 Wikihttps://github.com/alibaba/canal/wikiQuickStart、Admin、Adapter 等全量指南
Admin 指南https://github.com/alibaba/canal/wiki/Canal-Admin-Guide管理控制台的部署与运维说明
Releases 页https://github.com/alibaba/canal/releases版本发布记录与发行包下载

二、软件概述

本文介绍的版本为 Canal v1.1.8,即 1.1.x 主线于 2025 年 1 月发布的最新稳定修复版本。

Canal 是阿里巴巴开源的 MySQL binlog 增量订阅与消费组件,以 Java 编写。名称取「水道、管道」之意:Canal 服务端把自己伪装成 MySQL 主库的一个从库(replica),通过 MySQL 复制协议拉取并解析 binlog,将行级数据变更(DML 与 DDL)转换为结构化事件,再交给下游客户端或消息队列消费。对业务方而言,它是一种不侵入业务代码、对主库影响可控的数据库变更捕获(CDC,Change Data Capture)手段,常用于缓存失效刷新、检索索引更新、异构数据库同步等场景。

从 1.1.4 版本起,项目引入了 canal-admin 工程,提供面向 WebUI 的 Canal 动态管理能力,支持配置、任务、日志的在线白屏运维;同时提供 canal-adapter 适配器,把增量数据投递到关系库、Elasticsearch、HBase 等下游存储。

三、核心架构

3.1 server 与 instance 模型

Canal 采用 server/instance 两级模型:一个 canal server 进程可承载多个 instance,每个 instance 对应一个逻辑上的数据订阅链路(通常对应一个 MySQL 主库加一组库表过滤规则)。instance 之间相互独立,可分属不同 server 节点,为水平扩展与隔离提供基础。

3.2 解析流水线:parser → sink → store

每个 instance 内部是一条三段式流水线:

  • EventParser:伪装为 MySQL 从库,向主库发送 dump 请求,持续拉取 binlog,并完成位点推进与 binlog 事件解析;
  • EventSink:对解析后的事件进行缓冲、过滤、路由与加工(例如按库表黑白名单过滤、多 instance 合并投递);
  • EventStore:以内存环形缓冲存储事件,供客户端拉取;写入满时阻塞解析,形成背压。

3.3 位点管理与高可用

消费位点(position)支持 memory、file 等本地方式保存;引入 ZooKeeper 后,位点与 instance 的主备切换信息集中存储,多个 canal server 可组成主备集群,同一 instance 在某一时刻仅由一个节点消费,实现服务端高可用。客户端侧配合 get/ack/rollback 消费语义完成断点续传。

3.4 投递通道:client、adapter 与消息队列

  • canal client:Java 原生客户端 API,通过 TCP 长连接拉取与确认数据,服务端数据格式基于 protobuf 定义的 Entry 协议;
  • canal server 直投 MQ:通过 canal.properties 中的 canal.serverMode 配置为 tcp、kafka 或 rocketmq,把解析结果直接投递到消息队列;
  • canal-adapter:面向落库场景的适配器,支持目标端关系数据库、Elasticsearch、HBase 等,并提供管理 REST 接口。

3.5 canal-admin 管理面

canal-admin 是独立部署的管理控制台,集中维护 server 与 instance 的配置、运行状态与日志,支持在线启停与配置下发,配合 server 侧的 admin 注册机制使用,是 1.1.x 线推荐的集群运维入口。

四、功能特性

4.1 binlog 解析与订阅能力

  • 伪装成 MySQL 从库,实时解析 ROW 格式 binlog,覆盖 INSERT/UPDATE/DELETE 行事件与 DDL 事件;
  • 支持按正则配置库表级订阅与黑名单过滤(canal.instance.filter.regex 等配置项);
  • 支持全量加增量的数据迁移思路(先借助外部工具导出存量,再从指定位点接入增量);
  • 兼容矩阵方面,官方 README 列明支持 MySQL 5.1.x、5.5.x、5.6.x、5.7.x、8.0.x。

4.2 高可用与集群

  • 依赖 ZooKeeper 实现 server 主备切换与位点共享;
  • 客户端可结合 ClientHA 实现消费端切换;
  • canal-admin 支持多 server 的统一纳管。

4.3 多下游投递

  • 原生支持投递 Kafka、RocketMQ,方便与流处理生态衔接;
  • canal-adapter 覆盖关系库同步、Elasticsearch、HBase 等目标端;
  • Java API 适合自研消费程序,Entry 协议字段包含库、表、操作类型、时间戳与行数据内容。

4.4 运维与监控

  • canal-admin 提供配置管理、实例管理、日志查看;
  • 服务端暴露监控指标与心跳配置,便于接入既有监控体系;
  • 支持 TSDB 与位点持久化等进阶配置。

五、快速上手

以下步骤引自官方 Wiki QuickStart(https://github.com/alibaba/canal/wiki/QuickStart),本文未做本地实测。

5.1 前置条件

对作为源的 MySQL 开启 binlog 并使用 ROW 格式:

[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server_id=1

为 Canal 创建专用账号并授予复制权限:

CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal';

5.2 部署与启动

从 GitHub Releases 下载 canal.deployer-1.1.8.tar.gz,解压后修改实例配置:

tar -zxvf canal.deployer-1.1.8.tar.gz -C ./canal
vi ./canal/conf/example/instance.properties
# 配置 canal.instance.mysql.slaveId、canal.instance.master.address、账号口令等
./canal/bin/startup.sh

默认监听 11111 端口,example 实例即开始拉取目标库 binlog。

5.3 客户端消费(Java)

以下为官方 Wiki QuickStart 中的简化客户端示例:

CanalConnector connector = CanalConnectors.newSingleConnector(
        new InetSocketAddress("127.0.0.1", 11111), "example", "", "");
int emptyCount = 0;
while (emptyCount < 5) {
    connector.connect();
    connector.subscribe(".*\\..*");
    connector.rollback();
    Message message = connector.getWithoutAck(1000);
    long batchId = message.getId();
    int size = message.getEntries().size();
    if (batchId == -1 || size == 0) {
        emptyCount++;
    } else {
        emptyCount = 0;
        // 逐条处理 Entry 并按库表类型分发
    }
    connector.ack(batchId);
}

六、适用场景与限制

6.1 适用场景

  • 缓存与检索同步:MySQL 行变更实时刷新 Redis 等缓存、驱动 Elasticsearch 索引更新;
  • 异构库同步:向其他关系库或分析库单向同步增量数据;
  • 消息管道:把数据库变更以消息形式接入 Kafka、RocketMQ,供下游多消费者使用;
  • 审计与触发:基于 binlog 的行级变更记录与业务事件派生。

6.2 限制与注意

  • 源端必须开启 binlog 且建议 ROW 格式;STATEMENT 格式下行数据无法还原;
  • 官方主线聚焦 MySQL 及其复制协议生态,PostgreSQL、MongoDB 等其他数据源不在 1.1.x 支持范围内;
  • 单 instance 串行解析,吞吐受单库 binlog 速率与解析性能约束,超大规模实时数仓场景需评估分库分表拆分多 instance;
  • 服务端高可用依赖 ZooKeeper,引入了额外组件运维成本;
  • 截至 2026-10-18,2.x 线没有正式发布版,生产规划仍应以 1.1.8 为基准。

七、同类选型对比

对比数据实查于 2026-10-18(GitHub Releases feed 与 shields.io 徽标)。

维度Canal 1.1.8Debezium 3.7.0.FinalMaxwell 1.46.0Flink CDC 3.7.0
开源许可Apache-2.0Apache-2.0Apache-2.0Apache-2.0
GitHub stars + 最近发版约 30k;2025-01-17约 13k;2026-09-29约 4.3k;2026-09-23约 6.5k;2026-10-10
版本节奏1.1.x 稳定维护,大版本更新缓慢主线持续迭代,季度级小版本维护节奏一般,年内有更新跟随 Flink 生态,迭代活跃
兼容矩阵MySQL 5.1.x~8.0.xMySQL、PostgreSQL、MongoDB、SQL Server 等多种连接器仅 MySQL/MariaDB binlogMySQL、PostgreSQL、MongoDB、Kafka、OceanBase 等多种源
下游形态Java API、Kafka/RocketMQ、adapterKafka 为主,配合 Connect 生态直接输出 JSON 到 Kafka/Redis 等集成 Flink 流处理,内置整库同步管道

选型建议:MySQL 单源、轻量接入且偏好自研消费程序的团队选 Canal;多源异构、面向 Kafka Connect 体系或需要数据库级快照一致性(snapshot)能力选 Debezium;需要把 CDC 与流计算、整库同步编排融合到同一引擎时选 Flink CDC。

八、参考链接