Canal 中配置 Kafka详解

Canal 直接发送消息到 Kafka 、RocketMQ配置 文章目录环境版本一、 安装zookeeper二、安装MQ三、 安装canal.server3.1 下载压缩包3.2 将canal.deployer 复制到固定目录并解压3.3 配置修改参数mq相关参数说明mq顺序性问题MQ发送性能数据阿里云RocketMQ对接参数3.4 启动3.5 查看日志3.6 关闭3.7 MQ数据消费 canal 1.1.1版本之后, 默认支持将canal server接收到的binlog数据直接投递到MQ, 目前默认支持的MQ系统有: kafka: https://github. 阅读详情
AI摘要

本文介绍在Canal中配置Kafka,将MySQL数据变更实时同步到Kafka消息队列。推荐使用Canal Adapter方式,解耦且配置灵活。详细说明了使用该方式的准备工作、核心配置步骤,包括配置Canal Server、Canal Adapter,还提及启动服务和验证的方法,扩展性好。

在 Canal 中配置 Kafka 是一个非常常见的应用场景,通常用于将 MySQL 的数据变更实时同步到 Kafka 消息队列中,供下游系统进行消费。

这个过程主要有两种方式:

  1. 推荐方式:使用 Canal Adapter

    • 优点:这是目前官方推荐的主流方式。Adapter 作为一个独立的组件,解耦了 Canal Server 和目标存储(如 Kafka、Elasticsearch、HBase 等)。配置更灵活,支持动态路由、数据ETL、多种数据源和目标源的组合。
    • 架构:MySQL -> Canal Server -> Canal Adapter -> Kafka
  2. 旧版方式:Canal Server 直连 Kafka

    • 优点:架构简单,少一个组件。
    • 缺点:功能相对单一,耦合度高,不方便进行数据转换和动态路由,已不被官方主推。
    • 架构:MySQL -> Canal Server -> Kafka

下面我将重点介绍 推荐方式(使用 Canal Adapter) 的配置步骤,因为它更强大和灵活。


准备工作

在开始配置前,请确保你已经准备好以下环境:

  1. MySQL 数据库:并已开启 Binlog(格式为 ROW)。
  2. Zookeeper 集群:Kafka 依赖 Zookeeper。
  3. Kafka 集群:可以正常生产和消费消息。
  4. Canal Server:已下载并可以成功启动,能够连接到 MySQL。
  5. Canal Adapter:已下载 canal.adapter-x.x.x.tar.gz 并解压。

核心配置步骤 (使用 Canal Adapter)

第 1 步:配置 Canal Server

这一步的目的是让 Canal Server 将数据变更发送出来,供 Canal Adapter 来消费。

  1. 修改 conf/canal.properties
    这个是 Canal Server 的全局配置文件。你需要确保 Canal Server 的模式是 tcp,以便 Adapter 可以连接。

    # canal server 的工作模式,tcp模式是默认的,提供给adapter/client消费
    canal.server.mode = tcp
    
  2. 修改 conf/example/instance.properties
    这是 example 实例的配置文件。你需要确保这个实例已经正确配置并可以连接到你的 MySQL。

    # ... 其他MySQL连接配置 ...
    canal.instance.mysql.slaveId = 1
    canal.instance.master.address = 127.0.0.1:3306
    canal.instance.dbUsername = canal
    canal.instance.dbPassword = canal
    # ...
    
    # 这一步非常重要!
    # 指定数据的输出格式。Canal Adapter 消费的是 protobuf 格式。
    # canal.mq.topic 这个可以不用配置,因为我们用Adapter来管理topic
    

    注意:在 Adapter 模式下,instance.properties 中不需要配置任何 canal.mq.* 相关的 Kafka 参数。Server 的职责只是抓取 Binlog 并通过 TCP 端口暴露出去。

第 2 步:配置 Canal Adapter (核心)

这是整个配置过程的重点。所有与 Kafka 相关的配置都在 Adapter 中完成。

  1. 进入 Canal Adapter 的 conf 目录。
  2. 核心配置文件是 application.yml。

打开 application.yml,你会看到两个主要部分:canal.conf 和 adapter.conf。

2.1 配置 canal.conf

这部分是配置 Adapter 如何去连接 Canal Server。

canal.conf:
  # Canal Server 的连接模式,这里我们用 tcp
  mode: tcp
  # Canal Server 的地址和端口
  flatMessage: false
  zookeeperHosts: ""
  servers: 127.0.0.1:11111 # 你的Canal Server的IP和端口
  destinations: example # 你要订阅的Canal Server实例名,多个用逗号隔开
  user: "" # Canal 1.1.5+ 支持用户名密码
  passwd: ""
2.2 配置 adapter.conf (重点中的重点)

这部分是配置 Adapter 如何将数据写入到目标端(即 Kafka)。

adapter.conf:
  # 数据源分组,可以有多个group
  groups:
    - groupId: g1 # 组ID,可以自定义
      # 外部适配器配置,即数据要写入到哪里
      outerAdapters:
        - name: logger # 用于调试,会在日志中打印数据变更信息,建议保留
        - name: kafka # 这是我们要配置的Kafka适配器
          key: my_kafka # 唯一标识,可以自定义
          properties:
            # Kafka brokers 地址
            bootstrap.servers: 192.168.1.100:9092,192.168.1.101:9092
            # 指定发送到哪个Kafka Topic。这里是固定topic
            # 如果想动态生成topic,比如根据库名和表名,可以使用占位符
            # topic: my_canal_data
            topic: ${db}_${table}  # 推荐!动态topic,例如:test_db_user_table
            
            # Kafka生产者的一些配置 (按需配置)
            acks: 1
            compression.type: lz4
            # ... 其他 Kafka Producer 配置
            
            # Canal消息到Kafka消息的映射关系
            # partition: 0          # 固定分区
            # partitionsNum: 3      # topic总分区数,用于哈希计算
            # hashColumns: id,name  # 使用哪些列的值进行hash来决定分区
            # partition-hash: ${db}.${table}:${id} # 更灵活的分区hash策略

关键参数解释:

  • outerAdapters: 定义了多个输出目标。我们在这里定义了一个名为 kafka 的输出。
  • name: kafka: 表明这是一个 Kafka 适配器。
  • properties:
    • bootstrap.servers: 【必填】 你的 Kafka 集群地址。
    • topic: 【必填】 目标 Topic 名称。
      • 固定 Topic:topic: my_test_topic,所有数据都进入这一个 Topic。
      • 动态 Topic:topic: ${db}_${table},这是非常强大的功能。它会根据数据变更发生的数据库名(db)和表名(table)自动创建或发送到对应的 Topic。例如,testdb.user 表的变更会发送到 testdb_user 这个 Topic。
    • partition-hash: 指定如何计算分区。id 是最常用的分区键,可以保证同一条记录的所有变更(INSERT, UPDATE, DELETE)都进入同一个分区,从而保证了处理的顺序性。
第 3 步:启动服务

请按照以下顺序启动所有组件:

  1. 启动 Zookeeper
  2. 启动 Kafka
  3. 启动 MySQL
  4. 启动 Canal Server
    sh bin/startup.sh
    
  5. 启动 Canal Adapter
    sh bin/startup.sh
    
第 4 步:验证
  1. 查看日志:

    • 查看 logs/canal/canal.log,确保 Canal Server 成功连接到 MySQL。
    • 查看 logs/adapter/adapter.log,确保 Adapter 成功连接到 Canal Server 和 Kafka。应该能看到类似 “start adapter for canal-client: … destination: example” 和 Kafka 连接成功的日志。
  2. 在 MySQL 中进行操作:
    在你的数据库中,对某个表进行 INSERT, UPDATE, DELETE 操作。
    例如,在 testdb.user 表中插入一条数据。

  3. 使用 Kafka 消费者工具验证:
    打开一个终端,使用 Kafka 自带的消费者脚本来监听 Topic。

    • 如果使用动态 Topic (${db}_${table}), 假设你的库是 testdb,表是 user:

      # 你的kafka安装目录
      cd /path/to/kafka/
      
      # 监听 testdb_user 这个topic
      bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.100:9092 --topic testdb_user --from-beginning
      
    • 如果使用固定 Topic (my_canal_data):

      bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.100:9092 --topic my_canal_data --from-beginning
      
  4. 观察输出:
    如果一切正常,你会在消费者终端看到一个 JSON 格式的消息,类似下面这样:

    {
      "data": [
        {
          "id": "1",
          "name": "John Doe",
          "email": "john.doe@example.com"
        }
      ],
      "database": "testdb",
      "es": 1668888888000,
      "id": 1,
      "isDdl": false,
      "mysqlType": {
        "id": "bigint(20)",
        "name": "varchar(255)",
        "email": "varchar(255)"
      },
      "old": null,
      "pkNames": [
        "id"
      ],
      "sql": "",
      "sqlType": {
        "id": -5,
        "name": 12,
        "email": 12
      },
      "table": "user",
      "ts": 1668888888123,
      "type": "INSERT"
    }
    

    这个 JSON 结构包含了数据变更的详细信息:

    • data: 变更后的数据行。
    • old: 变更前的数据行 (对 UPDATE 操作有值)。
    • type: 操作类型 (INSERT, UPDATE, DELETE)。
    • database: 数据库名。
    • table: 表名。

至此,Canal 通过 Adapter 将数据变更同步到 Kafka 的配置就完成了。这种方式扩展性好,强烈推荐使用。

Kafka相关配置,canal检测数据发送kafka同步数据到ES 文章目录前言1.application.yml2.kafka的配置类config2.kafka的consumer总结 前言 Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。 主要应用场景是:日志收集系统和消息系统。 Kafka主要设计目标如下: 以时间复杂度为O(1)的方 阅读详情

相关推荐

canal1.1.4相关配置及安装(下一篇配合kafka来实现同步数据到ES)

Canal,译意为水道/管道/沟渠。主要用途是基于MYSQL数据库增量日志解析,提供增量数据订阅和消费。通过binlog日志来实现对数据库的检测。 文章目录Canal一、修改mysql的配置二、Canal的安装1.修改canal.instance.master.address的值为要连接的数据库的ip地址2.设置连接数据库的用户名和密码,这个用户名和密码是在Mysql中授权的用于伪装成Mysql slave的用户名和密码3 配置监控规则总结 Canal 提示:以下是本篇文章正文内容,下面案例可供参考

weixin_42772168的博客 852

基于Canal+kafka监听数据库变化的最佳实践

工作中,我们很多时候需要根据某些状态的变化更新另一个业务的逻辑,比如订单的生成,成交等,需要更新或者通知其他的业务。我们通常的操作通过业务埋点、接口的调用或者中间件完成。但是状态变化的入口比较多的时候,就很容易漏掉某些地方。代码维护起来也比较麻烦。今天介绍阿里出品的【canal】中间件完成数据库字段的监听。

static_coder的博客 3658

LTC3783 LED驱动控制器设计与效率优化详解

开关电源控制器是现代LED照明的核心器件,通过电流模式控制实现高效能量转换。其核心原理是通过采样电阻检测负载电流,配合误差放大器形成闭环调节,在汽车电子、显示背光等场景中确保±3%的电流精度。LTC3783作为典型代表,集成升压/降压-升压多拓扑支持,配合PWM调光技术可实现3000:1的无色偏调光范围。在工程实践中,需重点考量功率电感选型、MOSFET开关损耗与热管理设计,例如在38W功率方案中采用10μH/5A电感和4.5mΩ MOSFET可达成95%效率。该方案特别适用于需要应对9-36V宽输入电压波

weixin_36231030的博客 398

Canal+kafka 配置与部署笔记

Canal+kafka 配置与部署笔记

xu963981912的博客 3701

手把手教你用LIO-SAM搞定激光雷达和IMU联合标定(附避坑指南)

本文详细介绍了使用LIO-SAM进行激光雷达与IMU联合标定的全流程,包括标定原理、工具选型、硬件配置、数据采集、LI_calib标定步骤及LIO-SAM集成验证。特别提供了避坑指南和参数优化技巧,帮助开发者高效完成传感器标定,提升自动驾驶和机器人定位精度。

hadoop5ranger的博客 995

大一Python之循环解决实际问题

pythin之循环解决实际问题

weixin_66263546的博客 2287

Kafka + Canal + MySQL 集群部署

canal产生的背景:早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。canal 翻译为水道,管道,沟渠,是由java语言开发的,它的定位就是基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持mysql/mariadb。

qq_48391148的博客 3783

cadence Virtuoso ADE原理图库中的VCVS(压控电压源)使用

Symbol: vcvs (Voltage Controlled Voltage Source) Vop−Von=egain⋅(Vip−Vin)V_{op}-V_{on}=egain\cdot(V_{ip}-V_{in})Vop​−Von​=egain⋅(Vip​−Vin​) 所以可以得出 ⟹Vop=egain⋅(Vip−Vin)+Von\Longrightarrow V_{op}=egain\cdot(V_{ip}-V_{in})+V_{on}⟹Vop​=egain⋅(Vip​−Vin​)+Von​ 使

大学生视野 2万+

Kafka/Canal

1.kafka 发布与订阅的分布式(distributed)消息系统,让实时数据在之中排队,缓冲减压,存储实时数据2.消息队列的应用场景:峰值压力缓冲3.producer 数据的生产者consumer 消息的消费者broker kafka集群的server负责处理消息读写请求,存储数据topic 消息队列,读写数据的单位4.一个topic分成多个partition(为了做分布式),分区内部消息强有序分区之间是无序的,每个消息都有一个序号叫offset。.........

qq_45409791的博客 1267

UE5.5使用ControlRig实现MetaHumanNPC看向玩家

本文介绍了在虚幻引擎中实现NPC自然看向玩家的技术方案。通过MetaHuman的ControlRig系统,采用面部动画曲线+全身动画Montage的表演方式,结合ControlRig驱动CTRL_lookat控制器实现视线追踪。

平常心 1302

车间数据孤岛终于破了!C#上位机+MQTT打通产线与MES,数据延迟从小时级降到秒级

本文针对工业上位机开发中常见的车间数据与企业管理系统(MES)割裂问题,提出基于C#和MQTT协议的完整解决方案。通过EMQX MQTT Broker实现数据实时双向传输,将质量追溯时间从2小时缩短至10秒,生产计划自动下发,实现秒级数据延迟。方案采用分层解耦架构,支持设备更换和系统升级,核心优势包括低延迟、高可靠性和易扩展性。文章详细介绍了MQTT协议选型理由、整体架构设计、技术选型(EMQX Broker和MqttNet客户端),并提供了C#实现代码和部署流程。该方案已在实际产线验证,可有效解决&quo

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 479

canal 投递 数据 只进kafka 0分区

canal 投递 数据 只进kafka 0分区 首先要确保其余kafka 有多个分区 在 instance.properties 加入以下配置即可 二者缺一不可 下面一段摘至官网: mq顺序性问题 1.canal目前选择支持的kafka/rocketmq,本质上都是基于本地文件的方式来支持了分区级的顺序消息的能力,也就是binlog写入mq是可以有一些顺序性保障,这个取决于用户的一些参数选择 2.canal支持MQ数据的几种路由方式:单topic单分区,单topic多分区、多topic单分区、多topi

weixin_43564627的博客 933

为什么我的 Spark Executor / Yarn Container 只有一个vCore?

在很多集群里,在关闭了Spark的DynamicAllocation的前提下(避免自动申请空闲资源,干扰测试结果),都会观察到:提交Spark作业时,申请 1 个 driver + n 个 executor 会在Yarn上会对应创建 n+1 个 container,但是每个container只有一个vCore,通过--driver-cores和--executor-cores设定的vCore数都未奏效。有人会因此错误的认为Yarn上的一个vCore对应一个Spark的executor,这是非常错误的,正确的

Laurence的技术博客 916

Canal安装与配置,推送数据到kafka

Canal安装与配置,并推送数据到kafka

qq_37074682的博客 2781

Cadence OrCAD Capture原理图中为功能模块分配ROOM的方法

本文详解介绍原理图设计阶段为原理图模块分配ROOM的方法。

fydar的博客 1345

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

canal与kafka的配置

参考内容:Canal Kafka RocketMQ QuickStart

oTianShiZaiChangGe1的博客 1449

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Canal整合Kafka配置

Canal整合Kafka配置 1.指明canal投到哪一个topic主题 进入 XXX\canal-service\conf\example 目录 修改 instance.properties canal.mq.topic=example 修改为 canal.mq.topic=tst-topic(投到哪个MQ里面) 2.指明canal是kafka模式 进入 XXX\canal-service\conf 修改 canal.properties 将 canal.serverMode = tcp 修改为 c

luluz2010的博客 1201

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

canal里如何配置kafka密码认证

#登录canal server,修改配置文件,添加kafka密码认证信息 vi /opt/canal-server/conf/canal.properties 添加以下三行内容: kafka.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username='admin' password='密码'; kafka.sasl.mechanism=PLAIN kafka.securi..

雅冰石的专栏 2584

canal同步mysql到kafka,canal同步数据到kafka配置及源码

canal.properties 配置 instance.properties 配置 kafka的 server.properties 配置 canal客户端代码import com.alibaba.fastjson.JSONObject;import com.alibaba.otter.canal.client.CanalConnector;import com.alibaba.otter.c...

weixin_39526546的博客 609

Canal 与 Kafka 集成安装与配置

Canal 与 Kafka 集成安装与配置 vim 编辑中 >>> 后为列出原内容其后紧接的 <<< 行为对其的更改,没有前置符号的表示新添 主机环境: CentOS 7.6 内存至少 1.5G,否则服务会启动不起来 软件版本 MySQL 5.7.28 OpenJDK 8 Zookeeper 3.5.6-bin Kafka 2.12(Scala)-2.3.0 C...

weixin_45203131的博客 1167

Canal 监听 Mysql 自动写入 Kafka 并消费 配置 Windows 版

搭建环境使用的版本如下: mysql-installer-community-8.0.20.0.msi jdk1.8.0_251 apache-zookeeper-3.6.2-bin kafka_2.13-2.7.0 canal.deployer-1.1.5-SNAPSHOT Zookeeper 配置 下载完成后解压结构目录如下: 复制一份conf/zoo_sample.cfg改为zoo.cfg 编辑配置文件,主要配置代码如下: # 日志以及数据存储路径自己定义 dataDir=D:\kaifa\env\

weixin_44466075的博客 3003

Canal配置多个实例以及将Mysql指定表的binlog导入指定的Kafka的Topic

Canal配置多个实例以及将Mysql指定表的binlog导入指定的Kafka的Topic

《@书山有径%》的博客 2053

Canal的安装配置与Kafka集成实战指南

本文详细介绍了Canal的安装配置与Kafka集成实战指南,涵盖Canal的核心概念、环境准备、安装步骤及Kafka集成配置。通过实际案例和优化建议,帮助开发者高效实现MySQL数据实时同步到Kafka,提升数据处理能力。

work3的博客 305

canal-1.1.7 实时同步mysql至kafka配置

Releases · alibaba/canal · GitHub我下载的是最新版1.1.7:canal.deployer-1.1.7.tar.gz此为部署安装包,没有管理界面,可满足基础使用。上传至服务器,在需要安装的路径新建一个canal-1.1.7文件夹,解压至该文件夹:修改文件: 重启mysql服务以上表示创建canal用户,密码为canal123,授权所有库的查询、插入、复制slave等所有权限,可根据需求自行修改。%表示允许canal用户使用任何远程ip登录(前提是服务器联通)。 若报错:-b

Dark_Fairy的博客 1854

kafka mysql安装与配置_Canal 与 Kafka 集成安装与配置

Canal 与 Kafka 集成安装与配置vim 编辑中 >>> 后为列出原内容其后紧接的 <<< 行为对其的更改,没有前置符号的表示新添主机环境CentOS 7.6 内存至少 1.5G,否则服务会启动不起来软件版本MySQL 5.7.28OpenJDK 8Zookeeper 3.5.6-binKafka 2.12(Scala)-2.3.0Canal deplo...

weixin_30531679的博客 224

配置canal实时将变化数据Sink到Kafka

配置canal实时将变化数据Sink到Kafka canal server配置 vim /opt/module/canal/conf/ 重点关注以下配置: canal.ip = hadoop162 # canal服务器绑定ip地址 canal.port = 11111 # canal端口号, 将来客户端通过这个端口号可以读到数据 canal.zkServers = hadoop102:2181,hadoop103:2181,hadoop104:2181 # zk地址, 用来管理canal的高

weixin_42796403的博客 395
上一篇: 构造函数注入在spring boot 中怎么使用详解
下一篇: Spring IoC Setter 注入:它适用于哪些场景?
冰糖心书房
博客等级 码龄15年 6014粉丝 690原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值