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

Debezium Outbox模式开启JSON payload展开后空数组丢失如何解决?

问题

基于Debezium官方文档使用PostgreSQL连接器实现Outbox模式时,开启transforms.outbox.table.expand.json.payload=true后出现空数组丢失异常:数据库表中存储的JSON数据{"some":"test", "agreemets":[]},在Kafka主题消息中仅保留{"some":"test"};将该配置设为false则空数组正常存在。

完整Kafka Connect配置如下:

{
    "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
    "tasks.max": "1",
    "database.hostname": "db",
    "database.port": "5432",
    "database.user": "postgres",
    "database.password": "postgres",
    "database.dbname": "mycbh_dev",
    "database.server.name": "db",
    "schema.include.list": "common",
    "table.include.list": "common.outboxmessages",
    "tombstones.on.delete": "false",
    "transforms": "outbox",
    "transforms.outbox.type": "io.debezium.transforms.outbox.EventRouter",
    "transforms.outbox.route.by.field": "topic",
    "transforms.outbox.route.topic.replacement": "${routedByValue}",
    "transforms.outbox.table.field.event.timestamp": "created_at",
    "transforms.outbox.table.expand.json.payload": "true",
    "transforms.outbox.tracing.with.context.field.only": "true",
    "plugin.name": "pgoutput"
}

解决方案

要在开启JSON payload展开的同时保留空数组,需在现有配置中添加以下参数:

"transforms.outbox.table.expand.json.payload.include.empty.values": "true"

该配置项是Debezium在1.9.7.Final、2.0.1.Final及更高版本中新增的,用于控制展开JSON payload时是否保留空值(包括空数组、空字符串等)。添加后,空数组会被正常保留在Kafka消息中。

若你的Debezium版本低于上述版本,建议先升级到对应版本再添加该配置。


内容的提问来源于stack exchange,提问作者Oleksandr Klosovych

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:47:10