FlowFile的大小会影响I / O吗

时间:2019-01-17 16:08:10

标签: apache-nifi

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

尤其是对于Kafka Consumer Processor,它包含一个名为Message Demarcator的属性。使用该设置,一个FlowFile可以包含许多事件,而没有它,则一个FlowFile仅包含一个事件。假设FlowFile包含1000个json对象而不是1个json对象,性能会更好吗?

部分使我感到困惑的是这份文件 https://community.hortonworks.com/questions/21011/how-i-extract-attribute-from-json-file-using-nifi.html

它表示将json值存储在FlowFile属性中,这意味着它每FlowFile处理一个Json对象,而一个FlowFile包含一个Json对象。因为如果FlowFile具有多个json对象,则它必须创建与json对象一样多的属性。例如,每个json对象都有一个名为occurred_at的时间戳字段,然后必须创建occurred_at_1 occurred_at_2,依此类推。

1 个答案:

答案 0 :(得分:3)

如果您可以将多个邮件放在一个流文件中,那么您将看到性能上的显着提高。例如,假设您消耗了100万条来自Kafka的消息,并且每个流文件只有一条消息,这意味着有100万次写入流文件存储库,100万个源事件,100万个堆中的对象,等等。如果您有1个具有一百万条消息的流文件,它将是对流文件存储库的写操作1个,源事件,堆上的1个对象(不是内容)。

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