Apache nifi 流文件的大小是否影响I/O

Apache nifi 流文件的大小是否影响I/O,apache-nifi,Apache Nifi,流文件大小的考虑因素是什么?它是否会影响I/O?如果提供足够的内存,它是否越大越好?因为NIFI会将每个流文件从磁盘保存到内存 特别是对于Kafka消费处理器,它包含一个名为消息标界器的属性。通过设置,一个流文件可以包含多个事件,如果没有设置,一个流文件只能包含一个事件。比如说,如果FlowFile包含1000个json对象而不是1个json对象,性能会更好吗 尤其令我困惑的是这份文件 它表示将json值存储在FlowFile属性中,这意味着它每个FlowFile处理一个json对象,一个Fl

流文件大小的考虑因素是什么?它是否会影响I/O?如果提供足够的内存,它是否越大越好?因为NIFI会将每个流文件从磁盘保存到内存

特别是对于Kafka消费处理器,它包含一个名为
消息标界器的属性。通过设置,一个流文件可以包含多个事件,如果没有设置,一个流文件只能包含一个事件。比如说,如果FlowFile包含1000个json对象而不是1个json对象,性能会更好吗

尤其令我困惑的是这份文件


它表示将json值存储在
FlowFile
属性中,这意味着它每个
FlowFile
处理一个json对象,一个
FlowFile
包含一个json对象。因为如果一个流文件有多个json对象,它必须创建与json对象一样多的属性。例如,每个json对象都有一个名为
occurrent\u at
的时间戳字段,然后它必须创建
occurrent\u at\u 1
occurrent\u at\u 2
,以此类推。

如果您可以在一个流文件中保存多条消息,那么性能将显著提高。例如,假设您使用了来自Kafka的100万条消息,并且每个流文件有一条消息,这意味着100万次写入流文件repo,100万个源事件,堆上的100万个对象,等等。如果您有一个包含100万条消息的流文件,那么它将是1次写入流文件repo,1次源事件,堆上有1个对象(不是内容)


如果在单个流文件中有多条消息,则无法将字段值提取到属性中,因为正如您所指出的,每个记录的字段值都不同。您可以通过使用记录处理器来解决这个问题,该处理器允许您就地处理记录。例如,您可以不使用EvaluateJsonPath+RouteOnAttribute,而只使用PartitionRecord根据字段的值来分隔消息。

如果您可以在单个流文件中同时保存多条消息,则性能将显著提高。例如,假设您使用了来自Kafka的100万条消息,并且每个流文件有一条消息,这意味着100万次写入流文件repo,100万个源事件,堆上的100万个对象,等等。如果您有一个包含100万条消息的流文件,那么它将是1次写入流文件repo,1次源事件,堆上有1个对象(不是内容)

如果在单个流文件中有多条消息,则无法将字段值提取到属性中,因为正如您所指出的,每个记录的字段值都不同。您可以通过使用记录处理器来解决这个问题,该处理器允许您就地处理记录。例如,您可以不使用EvaluateJsonPath+RouteOnAttribute,而是使用PartitionRecord根据字段的值来分隔消息