FlowFile规模的考虑因素是什么?它会影响I/O吗?如果提供足够的内存,它是否越大越好?因为每个FlowFile的NIFI都会从磁盘持续到内存?
特别是对于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,依此类推。
发布于 2019-01-18 00:15:58
如果您可以将多个消息放在一个流文件中,您将看到性能的显着提高。例如,假设您从Kafka消费了100万条消息,并且每个流文件有一条消息,这意味着对流文件存储库的100万次写入,100万个来源事件,100万个对象,等等。如果您有1个具有100万条消息的流文件,那么它将是1个对流文件存储库的写入,1个来源事件,1个堆上的对象(不是内容)。
当您在单个流文件中有许多消息时,您不能真正将字段的值提取到属性中,因为正如您所指出的,每个记录的字段值都不同。您可以通过使用记录处理器来解决此问题,该处理器允许您就地处理记录。例如,您可以使用PartitionRecord根据字段的值来分隔消息,而不是使用EvaluateJsonPath + RouteOnAttribute。
https://stackoverflow.com/questions/54239893
复制相似问题