5

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

FirstInFirstOutPrioritizer:给定两个流文件,首先处理连接的流文件。

OldestFlowFileFirstPrioritizer:给定两个 FlowFile,首先处理数据流中最旧的一个。“如果没有选择优先级,这是使用的默认方案。”

4

2 回答 2

10

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

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

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

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

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

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

于 2018-04-05T16:51:22.420 回答
6

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

NiFi 流程演示优先级场景

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

如果进入系统的某些数据“脏”,它会被路由到“清理”它的处理器。这个处理器需要 3 秒来执行。

如果“清理数据”中的清理关系和成功关系都直接转到“处理数据”,您将无法控制这些流文件的处理顺序。但是,因为有一个合并这些队列的漏斗,所以您可以在排队的队列上选择一个优先级,并控制该顺序。您是否希望第一个流文件进入首先处理的队列,或者您是否希望先处理较早进入 NiFi 的流文件,即使它们在较新的流文件之后进入此特定队列?

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

于 2018-04-05T17:08:36.447 回答