【问题标题】:In Nifi, what is the difference between FirstInFirstOutPrioritizer and OldestFlowFileFirstPrioritizer在 Nifi 中,FirstInFirstOutPrioritizer 和 OldestFlowFileFirstPrioritizer 有什么区别
【发布时间】:2018-04-05 14:48:47
【问题描述】:

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

FirstInFirstOutPrioritizer:给定两个 FlowFile,首先处理连接的那个。

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

【问题讨论】:

    标签: 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 的流文件,即使它们在较新的流文件之后进入此特定队列

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-20
        • 2020-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多