You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Debezium Postgres Connector至v2.0.1引发Schema兼容性问题

Debezium 1.9.3 升级至 2.0.1 后 Schema 兼容性问题解决方案

Debezium 2.0.x 版本对内部 Schema 定义做了集中化、规范化重构(对应 DBZ-4365、DBZ-5044),导致升级后生成的 Schema 与 1.9.3 版本注册的旧 Schema 不兼容,触发 Schema Registry 的兼容性校验报错。而事件扁平化模式下,连接器输出简化后的业务数据结构,不受 Debezium 内部 Schema 变更影响,因此无报错。以下是具体解决方案:

解决方案1:全量重新同步数据(推荐用于允许数据重导的场景)

  • 停止运行中的 1.9.3 版本 Debezium 连接器
  • 通过 Schema Registry API 删除对应 CDC 主题的所有 Schema subject:
    curl -X DELETE http://<schema-registry-host>:<port>/subjects/{subject-name}
    
  • 部署并启动 2.0.1 版本的 Debezium 连接器,从头开始全量同步数据
  • 新连接器会注册符合 2.0.x 规范的 Schema,旧 Schema 已清理,不会触发兼容性校验

解决方案2:临时调整 Schema Registry 兼容性级别(过渡方案)

  • 将对应 subject 的兼容性级别临时修改为 NONE(关闭兼容性校验):
    curl -X PUT -H "Content-Type: application/vnd.schemaregistry.v1+json" \
    --data '{"compatibility": "NONE"}' \
    http://<schema-registry-host>:<port>/config/<subject-name>
    
  • 启动 2.0.1 版本连接器,待新 Schema 成功注册后,再将兼容性级别改回原有设置(如 BACKWARD)
  • 注意:此方法跳过兼容性校验,需确保下游消费者能兼容新旧 Schema 结构

解决方案3:启用事件扁平化模式(长期稳定方案)

  • 在连接器配置中添加事件扁平化转换,直接输出业务数据而非 CDC 原始结构:
    transforms=unwrap
    transforms.unwrap.type=io.debezium.transforms.ExtractNewRecordState
    transforms.unwrap.drop.tombstones=false # 可选,根据业务需求保留墓碑消息
    
  • 扁平化后的 Schema 仅包含业务表字段,不受 Debezium 内部 Schema 变更影响,从根本上避免此类兼容性问题

解决方案4:手动兼容新旧 Schema(适合需保留历史数据的场景)

  • 导出 1.9.3 版本注册的旧 Schema 和 2.0.1 版本生成的新 Schema
  • 对比两者差异,修改新 Schema 使其满足 Schema Registry 的兼容性规则(如将新增字段标记为可选、添加默认值等)
  • 通过 Schema Registry API 手动注册修改后的兼容 Schema
  • 启动 2.0.1 版本连接器,此时新 Schema 会被识别为兼容版本,顺利通过校验

内容的提问来源于stack exchange,提问作者Rishabh Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:07:53