首页/数据/数据工程与 ETL 速查/Debezium MySQL 连接器配置
CDC 与同步53 条

Debezium MySQL 连接器配置

Debezium MySQL 连接器以 JSON 提交到 Kafka Connect REST 接口(POST /connectors)。关键项:connector.class、topic.prefix(2.x 起替代 database.server.name)、database.server.id、库表过滤清单与 schema 历史主题,以及快照模式。

配置怎么提交

Debezium 连接器以 JSON 提交到 Kafka Connect 的 REST 接口:POST /connectors 新建,PUT /connectors/<name>/config 更新已存在的配置,DELETE 删除,GET .../status 查看运行状态与失败原因。配置写在 config 对象里,键值与 Debezium 官方文档中的属性名一一对应。

三个必须想清楚的点

第一,主题前缀决定生成主题名,必须全小写且不含特殊字符;第二,server.id 让连接器以从库身份接入,每个连接器必须独占编号;第三,schema 历史主题保存表结构变更记录,一旦丢失,连接器重启后无法正确解析后续事件,等于要重新做一次快照。

基本信息

提交方式Kafka Connect REST 接口,JSON 请求体
核心项connector.class、topic.prefix、database.server.id、库表过滤清单
历史主题schema.history.internal.* 保存表结构变更记录,不能丢
快照模式snapshot.mode 控制启动时是否先做全量快照
查看状态GET /connectors/<name>/status 返回连接器与各任务状态

关键配置读法

配置项作用建议
connector.class指定连接器实现类与数据源类型匹配,写错直接提交失败
topic.prefix生成主题的前缀(2.x 起取代 database.server.name)全小写,避免特殊字符
database.server.id以从库身份接入使用的编号每个连接器独占,且不与真实从库冲突
database.include.list / table.include.list过滤需要捕获的库与表按需收窄,避免生成大量无用主题
snapshot.mode初始快照策略:initial / schema_only / no_data 等大表评估快照时长与源库压力

连接器 JSON(提交到 Connect)

连接器 JSON(提交到 Connect)
{
  "name": "mysql-cdc-orders",
  "config": {
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "topic.prefix": "db1",
    "database.hostname": "10.0.0.5",
    "database.port": "3306",
    "database.user": "cdc_ro",
    "database.password": "***",
    "database.server.id": "184054",
    "database.include.list": "app",
    "table.include.list": "app.orders,app.order_items",
    "schema.history.internal.kafka.bootstrap.servers": "kafka1:9092",
    "schema.history.internal.kafka.topic": "schema-changes.app",
    "snapshot.mode": "initial"
  }
}

提交、更新与查看

提交、更新与查看
# 新建连接器
curl -s -X POST http://kafka-connect:8083/connectors \
  -H 'Content-Type: application/json' -d @debezium-mysql.json

# 查看状态:连接器本身与各任务是否有失败
curl -s http://kafka-connect:8083/connectors/mysql-cdc-orders/status

# 更新已有配置(表过滤清单变更时用 PUT,不会重置位点)
curl -s -X PUT http://kafka-connect:8083/connectors/mysql-cdc-orders/config \
  -H 'Content-Type: application/json' -d @config-only.json
snapshot.mode=initial 会先做一次全量快照再转入增量;只想要增量变更(例如已有存量数据由别的方式导入)就用 no_data 或 schema_only,选错会重复导入全部存量。
schema 历史主题(旧名 database.history.kafka.topic,2.x 起改为 schema.history.internal.*)不能丢也不能改名:它记录表结构演进,丢了之后连接器重启无法解析后续事件,只能重新快照。

易错点

  • topic.prefix 使用大写或特殊字符,生成的主题名不符合命名规范,后续监控与权限策略全部要跟着迁就
  • 连接器脚本里明文写数据库密码并提交到代码仓库,凭据泄露需要整体轮换
  • schema 历史主题被误删或改名,连接器重启后无法解析表结构变更,只能重新做快照
  • 多个连接器共用 database.server.id,位点互相抢占,事件时有时无且难以定位

数据来源与参考

  • Debezium 官方文档(MySQL Connector configuration properties)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌