【问题标题】:In Nifi, what is the difference between FirstInFirstOutPrioritizer and OldestFlowFileFirstPrioritizer在 Nifi 中,FirstInFirstOutPrioritizer 和 OldestFlowFileFirstPrioritizer 有什么区别
【发布时间】:2018-04-05 14:48:47
【问题描述】:
【问题讨论】:
标签:
hadoop
apache-nifi
hortonworks-dataflow
【解决方案1】:
假设两个处理器 A 和 B 都连接到一个漏斗,然后该漏斗连接到处理器 C。
场景 1 - 漏斗和处理器 C 之间的连接具有先进先出优先级。
在这种情况下,漏斗和连接C之间队列中的流文件将严格按照它们到达队列的顺序进行处理。
场景 2 - 漏斗和处理器 C 之间的连接具有最旧的流文件优先级。
在这种情况下,漏斗和连接 C 之间的队列中可能已经存在流文件,但是其中一个处理器将流传输到该队列,该队列比该队列中的所有流文件都旧,它将跳转到前面。
您可以想象,一些流程文件来自流程的不同部分,处理时间比其他流程文件要长,但它们最终都汇集到同一个队列中,因此这些来自较长处理部分的流程文件是被认为年龄较大。
【解决方案2】:
Apache NiFi 处理来自许多不同来源的数据,并且可以通过许多不同的处理器路由数据。让我们使用以下示例(忽略处理器类型,只关注标题):
首先,传入数据的相对速率可能因源/提取点而异。在这种情况下,数据库轮询每分钟进行一次,而 HTTP 轮询每 5 秒进行一次,文件拖尾是每秒进行一次。因此,即使一个数据库记录比另一个“旧”59 秒,如果它们在处理器的同一执行中被捕获,它们将同时进入 NiFi 并且流文件(取决于拆分)将具有相同的起源时间。
如果进入系统的某些数据“脏”,它会被路由到“清理”它的处理器。这个处理器需要 3 秒来执行。
如果“清理数据”中的 clean 关系和 success 关系都直接转到“处理数据”,您将无法控制执行的顺序这些流文件已被处理。但是,由于有一个合并这些队列的漏斗,您可以在 queued 队列上选择一个优先级,并控制该顺序。您是希望第一个流文件进入首先处理的队列,还是希望先处理较早进入 NiFi 的流文件,即使它们在较新的流文件之后进入此特定队列?
这是一个人为的示例,但您可以将其应用于灾难恢复情况,其中某些数据在某个时间窗口内丢失并且现在正在恢复,或者处理时间敏感数据的流程并且洞察在之后无效一段时间过去了。如果使用背压或以大(慢)批次获取数据,您可以看到在某些情况下,最旧的优先价值较低,反之亦然。