如何通过Kafka Connect Transforms提取嵌套列表最后元素
解决方案
要提取JSON嵌套数组的最后一个元素并生成目标消息,你需要调整Kafka Connect的SMT(Single Message Transforms)配置,结合多个内置Transform来完成。以下是完整的配置方案:
完整Transforms配置片段
"transforms": "deserializaJson,extractLastAddress,hoistAddress,cleanupFields", "transforms.deserializaJson.type": "com.couchbase.connect.kafka.transform.DeserializeJson", // 提取address数组的最后一个元素 "transforms.extractLastAddress.type": "org.apache.kafka.connect.transforms.ValueFromArray$Value", "transforms.extractLastAddress.field": "address", "transforms.extractLastAddress.index": "-1", // 使用-1表示取数组最后一个元素 // 将提取到的地址对象重命名为selectedAddress并提升为顶级字段 "transforms.hoistAddress.type": "org.apache.kafka.connect.transforms.HoistField$Value", "transforms.hoistAddress.field": "selectedAddress", // 移除不需要的字段(age和原始address字段) "transforms.cleanupFields.type": "org.apache.kafka.connect.transforms.ReplaceField$Value", "transforms.cleanupFields.blacklist": "age,address"
配置说明
- deserializaJson:保持你原有的Couchbase JSON反序列化配置,将数据库文档转为Kafka Connect可处理的结构化数据。
- extractLastAddress:使用
ValueFromArrayTransform,指定address字段为目标数组,通过index=-1提取最后一个元素。 - hoistAddress:使用
HoistField将提取到的地址对象包装为顶级字段selectedAddress。 - cleanupFields:使用
ReplaceField的黑名单模式,移除不需要的age和原始address字段,得到你期望的消息结构。
注意事项
- 确保你的Kafka Connect环境支持
ValueFromArrayTransform(该Transform从Kafka Connect 2.6.0版本开始内置)。 - 如果你的Kafka Connect版本较低,可考虑使用社区维护的Transform插件,配置逻辑类似。
内容的提问来源于stack exchange,提问作者ceb
相关产品推荐
相关产品推荐

