在Nifi中,FirstInFirstOutPrioritizer和OldestFlowFileFirstPrioritizer之间有什么区别

时间:2018-04-05 14:48:48

标签: hadoop apache-nifi hortonworks-dataflow

用户指南https://nifi.apache.org/docs/nifi-docs/html/user-guide.html包含有关优先级排序器的以下详细信息,请您帮助我了解这些优先级有何不同并提供任何实时示例。

FirstInFirstOutPrioritizer:给定两个FlowFiles,首先处理到达连接的FlowFiles。

OldestFlowFileFirstPrioritizer:给定两个FlowFiles,将首先处理数据流中最旧的FlowFiles。 '如果未选择优先顺序排序,则使用此默认方案。'

2 个答案:

答案 0 :(得分:9)

想象一下两个处理器A和B都连接到漏斗,然后漏斗连接到处理器C.

场景1 - 漏斗和处理器C之间的连接具有先进先出优先级。

在这种情况下,漏斗和连接C之间队列中的流文件将严格根据它们到达队列的顺序进行处理。

场景2 - 漏斗和处理器C之间的连接具有最早的流文件优先级优先级。

在这种情况下,漏斗和连接C之间的队列中可能已经存在流文件,但是其中一个处理器将流传输到比该队列中的所有流文件都旧的队列,它将跳转到前面。

你可以想象一些流文件来自流的不同部分,它比其他流文件需要更长的处理时间,但它们最终都汇集到同一个队列中,所以来自较长处理部分的这些流文件是认为年纪大了。

答案 1 :(得分:6)

Apache NiFi处理来自许多不同来源的数据,并可通过多个不同的处理器进行路由。让我们使用以下示例(忽略处理器类型,只关注标题):

NiFi flow demonstrating prioritization scenarios

首先,输入数据的相对速率可能因源/摄取点而异。在这种情况下,数据库轮询每分钟进行一次,而HTTP轮询每5秒进行一次,文件尾部每秒进行一次。因此,即使数据库记录是59秒,也可能是#34;如果它们在处理器的相同执行中被捕获,则它们将同时进入NiFi,并且流文件(取决于分割)将具有相同的原始时间。

如果某些数据进入系统"是脏的",它会被路由到一个“清理”的处理器。它。该处理器需要3秒钟才能执行。

如果 clean 关系和成功关系来自" Clean Data"直接进入"流程数据",您将无法控制这些流文件的处理顺序。但是,由于存在合并这些队列的漏斗,您可以在排队的队列中选择优先级排序器,并控制该顺序。您是否希望第一个流文件首先进入该队列,或者您是否希望先处理进入NiFi的流文件首先处理,即使它们在较新的流文件后输入此特定队列

这是一个人为的示例,但是您可以将其应用于灾难恢复情况,其中某些数据在时间窗口中丢失并且现在正在恢复,或者处理时间敏感数据的流程并且洞察力不是经过一段时间后有效。如果使用背压或以大(慢)批次获取数据,您可以看到在某些情况下,最早的第一个是不太有价值的,反之亦然。