Canal 从原理到实战:单机部署、Kafka、HA 与 canal-admin

Words 3340Read Time 9 min
2026-2-11
cover
type
Post
status
Published
date
Apr 3, 2021
slug
summary
本文介绍 Canal 的核心原理与部署使用流程:从 MySQL Binlog/主从复制机制出发,说明 Canal 的工作方式;给出 MySQL 环境与权限配置、单机 Canal 部署与 Canal Client 示例;进一步讲解对接 Kafka 的关键参数、消费示例与位点保存;最后补充 HA 架构与 canal-admin 的安装与注册要点,帮助快速搭建可用于生产的增量订阅链路。
tags
MySQL
Kafka
Big Data
category
Database
icon
password
wordCount
4205

前言

✍️
 
  • Canal 的价值在于把数据库的变更(insert/update/delete)从 MySQL Binlog 里“实时拿出来”,让你可以把增量数据同步到下游系统,比如 Kafka、ES、数据仓库或缓存。
  • 本文按“原理 → 环境配置 → 单机部署 → 客户端订阅 → Kafka 输出 → HA/运维”的顺序整理,目标是让你能从零搭建一条可用的增量订阅链路,并理解每一步为什么要这么配。
canal是纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL
1
 
MySQL主备复制原理
2
  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看) - MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log) - MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
Cannel工作原理
canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议 - canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议 - MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal ) - canal 解析 binary log 对象(原始为 byte 流)

配置mysql环境

  • 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式
    • 修改my.cnf,mysql 一般位于 maridb一般位于
  • 验证
    • 授权canal

      搭建canal环境(单机)

      • 下载canal(1.1.4) 版本
        • 解压后目录结构
          • 修改配置文件
            • 启动 / 关闭
              • 查看日志
                • 运行 canal-client
                  • 新建maven工程,添加pom依赖
                    CanalClientDemo.java
                • 控制台日志

                  Canal Kafka

                  • properties配置分为两部分:
                    • canal.properties (系统根配置文件)
                    • instance.properties (instance级别的配置文件,每个instance一份)
                  • canal.properties 相关配置
                    • 启动
                      • kafka查看
                        • 偏移量保存
                          • 单机下 binlog的偏移量是保存在 {{destinations }} 文件夹下的meta.dat

                        搭建canal环境(HA)

                        • 机器准备
                          • 2 台canal服务器节点:10.34.11.136, 10.34.11.65
                          • 3 台zookeeper 节点:10.34.11.70 ,10.34.11.133 ,10.34.11.124
                          • mysql 服务器: 10.34.12.185
                        • 修改配置文件,在单台机器上各自完成配置
                          • canal.propertis
                            example/instance.properties
                        • 运行

                          触发HA自动切换场景 (server/client HA模式都有效)

                          正常关闭(bin/stop.sh)
                          • 正常关闭canal server(会释放instance的所有资源,包括删除running节点)
                          • 平滑切换(gracefully)

                          canal-admin界面化安装

                          • 修改conf/application.yml
                            • 在mysql运行conf/canal_manager.sql
                              • 启动
                                • 浏览器访问 127.0.0.1:8089 (默认用户/密码 admin/123456)
                              • 新建集群
                                • 4
                                  4
                              • 选择编辑主配置
                                • image-20200605162605369
                                  image-20200605162605369
                              • 将上面ha搭建的两台canal停止
                              • 分别修改conf/canal_local.properties
                                • 在分别启动canal
                                  • 在server管理里面会多服务器
                                    image-20200605163745709
                                    image-20200605163745709
                                • 新建instance ,指定所属集群为canal_cluster
                                   
                                  Loading...