type
status
date
slug
summary
tags
category
icon
password
AI summary
Last edited time
Mar 20, 2025 04:57 PM
以前用过 maxwell,几年前就看到过 debezium,近期调研替换阿里云 DTS 订阅的方案,尝试一下
安装步骤
使用 docker compose 方式安装,相关配置如下
启动
准备 mysql 复制账号,这里用户名密码都使用
slave_debezium
,并给予从库权限确认 mysql 主从状态
创建 debezium 信号表
初始化 debezium-connect
关键配置说明
- table.include.list 要监听的对象表(命名形式 库名.表名,库名.表名)
- snapshot.mode = schema_only (在任务启动时,只做表结构快照,不做数据快照,默认的 initial 策略会对监听的表做全量快照,遇到数据量大的表可能会影响生产写入)
- snapshot.locking.mode = none(快照时不使用锁,避免影响生产写操作)
- signal.data.collection = app_dev.debezium_signal(指定 dbz 的 信号表,用于触发增量快照)
- read.only = true (只读账号时必须指定,否则会尝试对 debezium_signal 表做 insert 操作来产生水位信息)
- transforms = reroute (SMT 相关配置,通过正则表达式调整 dbz 默认的 topic 策略)
- decimal.handling.mode = string (将 mysql 中 decimal 类型转换为 string 输出, 确保不丢失精度)
- converters = bitOneToInt (默认 bit 会转换为 boolean 类型,这里通过自定义 CustomConvert 修改默认行为)下面暂时没用到
通过 Offset Explorer 3 可以看到相关数据

debezium-connect 常用 rest 操作
获取 connect 状态
获取 connect 配置
暂停 connect cdc 捕捉任务
恢复 connect cdc 捕捉任务
插入 debezium_signal 表触发指定表增量快照
问题处理记录
CDC 事件 topic 策略
默认 dbz 默认实现是一个表一个 topic,可以通过 kafka connect 的 SMT 机制来重路由,初始配置如下
但是查看 kafka 队列发现不生效!

原因是 正则表达式 \w 不包含中划线,需要修改为 \S
系统提示 debezium_signal 没有写入权限
在做增量快照时,后台报错提示 debezium_signal 没有 insert 权限
解决方案
加上 read.only = true(通过从库账号做只读快照)
MySQL binlog 验证
近期有个疑问,在一个事务开启后,多次对同一条数据进行 update 操作,binlog 会记录几次?
结论 每条 update 操作都会有对应的binlog 日志
验证过程如下
kafka 中 cdc 的记录,第一次修改
kafka 中 cdc 的记录,第二次修改
从上面两条修改记录的
"gtid": "57561b7b-e2a7-11ef-9d3b-0242ac130003:1252076"
可以看出,同一个事务中两次针对同一条数据的 update 操作都会产生对应的 binlog📎 参考文章
- ‣
- ‣
- ‣
- ‣
- ‣
- ‣