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

ven*_*ata 5 hadoop apache-nifi hortonworks-dataflow

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

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

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

Bry*_*nde 10

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

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

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

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

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

您可以想象一些流文件来自流的不同部分,其处理时间比其他流文件更长,但它们最终都汇集到同一队列中,因此来自较长处理部分的这些流文件被认为是较旧的.


And*_*ndy 6

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

NiFi流程展示了优先场景

首先,输入数据的相对速率可以根据源/摄入点而有所不同。在这种情况下,数据库轮询每分钟执行一次,而HTTP轮询则每5秒钟执行一次,而文件拖尾则是每秒进行一次。因此,即使一个数据库记录比另一个记录“旧”了59秒,如果在同一处理器执行中捕获它们,它们也会同时进入NiFi,并且流文件(取决于拆分)将具有相同的起始时间。

如果进入系统的某些数据“不干净”,则将其路由到“清除”它的处理器。该处理器需要3秒钟才能执行。

如果“干净数据”中的干净关系和成功关系都直接转到了“过程数据”,则您将无法控制这些流文件的处理顺序。但是,由于有一个合并这些队列的漏斗,因此您可以在排队的队列中选择优先级排序器,并控制该顺序。您是要第一个流文件首先进入该队列,还是要先处理早些时候进入NiFi的流文件,即使它们是在新的流文件之后进入此特定队列的呢?

这是一个人为的示例,但是您可以将其应用于灾难恢复情况,在该情况下某个时间窗口遗漏了一些数据,现在正在恢复这些数据,或者处理时间敏感数据的数据流在一定时间段后无效时间过去了。如果使用背压或大批量(慢速)获取数据,则可以看到在某些情况下,最旧的优先级的价值较低,反之亦然。