当前位置: 首页 > news >正文

Canal详解

Canal 是阿里巴巴开源的分布式 MySQL binlog 增量订阅&消费 中间件,最初用于阿里巴巴集团数据库异地多活的同步场景,现在也广泛用于业务的数据同步、缓存更新、数据监控等领域。
从 Canal 的工作原理、核心组件、使用场景、优缺点、部署架构等方面进行全面讲解。


一、Canal 是什么?

Canal 模拟 MySQL 的 slave 协议,伪装自己为 MySQL 的一个从库,主动拉取主库的 binlog 日志,并解析出数据变更内容(Insert、Update、Delete 等),再以事件形式推送给下游。


二、核心原理

Canal 的本质是一个 MySQL binlog 解析工具,其核心机制为:

1. 模拟 MySQL Slave

Canal 内部使用了 mysql-binlog-connector-java 模拟从库的行为,通过 COM_BINLOG_DUMP 命令向主库拉取 binlog。

2. 解析 Binlog

拉到 binlog 后,Canal 会对其进行解析,将二进制格式转化为结构化的数据对象。

3. 发送事件

Canal 提供多种消费方式(如 TCP、Kafka、RocketMQ)将解析后的数据推送给客户端。


三、核心组件结构

Canal 的整体结构分为三层:

MySQL└─ Canal Server├─ Instance(实例,负责连接一个 MySQL)├─ Parser(binlog 解析器)└─ Sink(数据分发模块,支持 Kafka、RocketMQ、TCP)└─ Client(订阅端,如缓存更新、ES、消息系统等)

四、典型使用场景

场景说明
缓存同步数据库更新后,自动刷新 Redis 缓存
全文检索同步数据库更新后同步更新到 Elasticsearch
多数据库同步(异地多活)多机房数据同步,做到容灾冗余
数据备份/审计binlog 实时解析,用于业务审计、操作记录等
异构数据库同步如 MySQL -> HBase / Kafka / MongoDB 等

五、部署模式

1. 单机模式(开发测试使用)

  • Canal Server + Instance 全部在一台机器上
  • 配置简单,适合调试

2. 集群模式(生产推荐)

  • 支持多 Instance,多 Canal Server 部署
  • 与 ZooKeeper 搭配进行 HA(高可用)
  • 每个 instance 负责监听一个 MySQL 实例

六、如何使用 Canal

1. MySQL 配置

确保 MySQL 开启 binlog,推荐使用 ROW 模式:

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

并创建同步账户:

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

2. Canal Server 配置

  • 编辑 instance 的配置文件 instance/example/instance.properties
  • 设置数据源、拉取起始位置、解析库表名等

3. 启动 Canal Server

sh bin/startup.sh

4. 客户端消费(举例)

  • TCP 客户端使用 com.alibaba.otter.canal.client.CanalConnector
  • Kafka 模式下监听指定 topic 消费 binlog 数据

七、输出的数据格式(简化)

Canal 会输出如下结构的 JSON:

{"data": [{"id": "1001","name": "张三"}],"database": "test","table": "user","type": "INSERT","es": 1629779298000,"ts": 1629779298000
}

八、Canal 与其他工具比较

工具说明特点
Canal基于 binlog 的 MySQL 数据同步支持高可用、灵活扩展
Debezium基于 Kafka 的 CDC 框架支持多种数据库(MySQL/Postgres/Mongo)
Maxwell轻量级 MySQL binlog 推送工具简单易用,但功能较弱
DTS(阿里云)阿里云的数据传输服务SaaS 服务,配置简单但受限于云平台

九、优缺点总结

优点:

  • 基于 binlog,不影响线上性能
  • 支持事务、行级数据变更
  • 支持 Kafka、RocketMQ 等异步消费方式
  • 灵活可扩展,开源生态活跃

缺点:

  • 仅支持 MySQL(PostgreSQL 支持需借助其他工具)
  • 需要管理 Canal Server 高可用
  • binlog 格式需设置为 ROW,否则无法获取行级变更

十、实践建议

  • Canal Server 和 Kafka/RocketMQ 组合使用,可靠性更高
  • 配置多个 instance 实现多个库同步
  • 使用 Spring Boot 整合 canal 客户端可实现缓存、ES等业务更新

相关文章:

  • 使用 XState 状态机打造英语单词学习界面(demo)
  • 对象存储Ozone EC应用和优化
  • 多电流传感器电流检测方法多电流传感器电流检测方法
  • 图片转Latex软件
  • HarmonyOS运动语音开发:如何让运动开始时的语音播报更温暖
  • 中断相关知识
  • C语言的全称:(25/6/6)
  • python模块——tqdm
  • An improved YOLACT algorithm for instance segmentation of stacking parts
  • 双面沉金PCB应用:打造卓越电子设备的黄金工艺
  • 深入浅出:计算机网络体系结构——信息世界的“交通规则”
  • C语言速成15之告别变量碎片化:C 语言结构体如何让数据管理从混乱走向有序
  • MCP协议三种传输机制全解析
  • 在线OJ项目测试
  • C++.OpenGL (7/64)摄像机(Camera)
  • 云服务器厂商机房是什么
  • 玛哈特辊式矫平机:塑造金属平整的精密力量
  • U-Mail邮件加密,保障邮件系统信息安全
  • 5.1 HarmonyOS NEXT系统级性能调优:内核调度、I/O优化与多线程管理实战
  • LlamaIndex 工作流简介以及基础工作流
  • 网站建设实训教程/谷歌三件套下载
  • 网站建设小图标/十大营销策略
  • wordpress 功能介绍/宁波seo关键词排名优化
  • 如何开wordpress网站/南昌网优化seo公司
  • 岳麓做网站的公司/seo关键词挖掘工具
  • php网站开发工具/百度登录入口官网