NiFi JoltTransformJson 只输出第一条记录

NiFi JoltTransformJson outputs only first record

我正在向 NiFi JoltTransformJSON 发送一些记录,例如:

{"uid":"x1","timestamp_ms":1419717816375}
{"uid":"x2","timestamp_ms":1419717816376}
...

它们是通过 ComsumeKafkaRecord 来的,它的 RecordWriter 是配置了 "One line per object" 的 JsonRecordSetWriter。我通过数据出处验证,当我向 Kafka 发送 5 条记录时,有 5 条记录从中出来。

Shift 变换的颠簸规范是

{
  "*": "&0",
 "timestamp_ms": "timestamp"
}

所以我只想重命名一个字段。我在高级部分验证了此规范按要求更改了我的 json。

但是当我启动所有组件并发送 5 条消息时,我只从 JoltTransformJson 获得第一条消息 - 已通过数据来源验证。

{"uid":"x1","timestamp":1419717816375}

这是怎么回事?

更新:原来我不得不使用JoltTransformRecord,然后它如我所料,即5条消息输入,5条输出。

但我仍然很困惑是什么让 JoltTransformJson 表现得那样?

之所以会这样,是因为您将数据(每行一条记录)引用为 JSON 而您的数据不是 JSON。如果是 JSON,那么它至少会以 [] 开头和结尾,并且每一行(最后一行除外)都以逗号结尾。

由于 JoltTransformJSON 只接受 JSON,它的行为就是这样。

关于您的编辑,JoltTransformRecord 知道如何将记录单独处理为不同的 JSON 对象,这就是它使用它的原因。