NiFi JoltTransformJson仅输出第一条记录

NiFi JoltTransformJson仅输出第一条记录,json,apache-nifi,jolt,Json,Apache Nifi,Jolt,我将向NiFi JoltTransferMJSon发送一些记录,如: {"uid":"x1","timestamp_ms":1419717816375} {"uid":"x2","timestamp_ms":1419717816376} ... 它们是通过ComsumeKafkaRecord来的,它的RecordWriter是JsonRecordSetWriter,配置为“每个对象一行”。我通过数据来源验证过,比如说,当我将5条记录发送给卡夫卡时,其中有5条记录 Shift变换的Jolt规范为

我将向NiFi JoltTransferMJSon发送一些记录,如:

{"uid":"x1","timestamp_ms":1419717816375}
{"uid":"x2","timestamp_ms":1419717816376}
...
它们是通过ComsumeKafkaRecord来的,它的RecordWriter是JsonRecordSetWriter,配置为“每个对象一行”。我通过数据来源验证过,比如说,当我将5条记录发送给卡夫卡时,其中有5条记录

Shift变换的Jolt规范为

{
  "*": "&0",
 "timestamp_ms": "timestamp"
}
所以我只想重命名一个字段。我在高级部分中验证了这个规范根据请求更改了我的json

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

{"uid":"x1","timestamp":1419717816375}
这里怎么了

更新:结果是我不得不使用JoltTransferMRecord,然后它按照我的预期运行,即5条消息输入,5条消息输出


但我仍然感到困惑的是,是什么让JoltTransformMJSON表现出这样的行为?

是什么让它表现出这样的行为,是因为您将数据(每行一条记录)称为JSON,而您的数据不是JSON。如果是JSON,那么它至少以[]开头和结尾,每一行(最后一行除外)以逗号结尾

因为JoltTransferMJSON只接受JSON,所以它的行为是这样的


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

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

因为JoltTransferMJSON只接受JSON,所以它的行为是这样的

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