Kafka Connect worker 要配什么
用 Debezium 就绕不开 Kafka Connect 的运行配置:worker 需要 bootstrap.servers、group.id(即集群名)、offset/config/status 三个内部主题,以及键值的序列化转换器。开发阶段用 standalone 模式,配置与位点存本地文件;生产环境用 distributed 模式,多个 worker 组成集群并通过 REST 接口增删连接器,配置与位点存在 Kafka 内部主题里。
基本信息
| distributed | 生产推荐:多 worker 组集群,用 REST 接口管理连接器 |
|---|---|
| standalone | 单机开发调试,配置与位点存本地文件 |
| 内部主题 | config 必须为 compacted,offset 与 status 由 Connect 维护 |
| 转换器 | 决定消息序列化格式(JSON/Avro 等),要先与下游约定 |
典型使用场景
- 生产部署:搭建 distributed worker 集群并规划内部主题副本
- 格式约定:与下游确认用 JSON 还是 Avro,避免消息结构无法解析
- 扩容:增加 worker 后由 Connect 自动分配任务
- 配置备份:确认内部主题副本数足够,避免单点丢失
- 排错:通过 REST 接口查看连接器与任务状态、重启失败任务
connect-distributed.properties 关键项
connect-distributed.properties 关键项
bootstrap.servers=kafka1:9092,kafka2:9092,kafka3:9092
group.id=debezium-cluster # 同一集群的 worker 共用这个 group.id
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=false # 关闭 schema 内嵌,避免消息体积膨胀
value.converter.schemas.enable=false
offset.storage.topic=connect-offsets
config.storage.topic=connect-configs
status.storage.topic=connect-status
offset.storage.replication.factor=3 # 内部主题副本数,生产不宜为 1模式与内部主题
| 项 | 作用 | 注意点 |
|---|---|---|
| group.id | 标识同一个 Connect 集群 | 不同集群必须不同,否则任务互相干扰 |
| config.storage.topic | 保存连接器配置 | 必须使用 compacted 清理策略 |
| offset.storage.topic | 保存连接器位点 | 丢失后需要重新快照 |
| status.storage.topic | 保存任务状态 | 监控与 REST 查询都依赖它 |
| 转换器配置 | 消息序列化格式 | 上下游必须一致,改格式等于改契约 |
生产环境的内部主题副本数建议与业务关键主题保持一致,否则单个 Broker 故障就可能丢掉连接器配置与位点。
转换器开启 schemas.enable 又没配套 schema 注册,消息里会内嵌完整 schema,体积明显膨胀且下游解析更麻烦,改动前先确认清楚。
连接器配置通过 REST 提交后会持久化到 config.storage.topic:worker 重启不会丢,但换 group.id 等于换一个集群,原有连接器与位点都不会被继承,迁移时特别注意这一点。