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

Debezium New Record State Extraction SMT处理DELETE操作异常问题

问题原因

你遇到的非主键字段为空现象是ExtractNewRecordState SMT的默认行为导致的:

  • 当delete.handling.mode设为rewrite时,默认情况下SMT会优先取事件的after块内容填充payload
  • DELETE事件本身不存在after块,只有before块存储删除前的记录内容,默认配置下仅会把主键字段从before块拷贝到payload里,其余非主键字段都会留空,所以你会看到id有值,first_name、last_name为空。

解决方案

在你现有的SMT配置中新增一行配置即可:

"transforms.unwrap.delete.use.before": "true"

修改后的完整配置如下:

"transforms": "unwrap",
"transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
"transforms.unwrap.drop.tombstones": true,
"transforms.unwrap.delete.handling.mode": "rewrite",
"transforms.unwrap.delete.use.before": "true",
"transforms.unwrap.add.fields": "db,schema,table,txId,ts_ms"

开启该配置后,DELETE事件的payload会直接使用before块的全量字段值填充,你就能拿到删除时刻first_name、last_name的原始值,同时原有的__deleted标记等附加字段也会正常保留。

注意事项

delete.use.before配置从Debezium 1.9版本开始支持,如果你使用的版本低于1.9,需要先升级Debezium到1.9及以上版本,或者自定义SMT实现相同逻辑。

内容的提问来源于stack exchange,提问作者Suren Aznauryan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:24:03