代码之家  ›  专栏  ›  技术社区  ›  venkata

在Nifi中,FirstInfirstOutpriorizer和OldestFlowFileFirstPriorizer之间的区别是什么

  •  5
  • venkata  · 技术社区  · 6 年前

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

    FirstInfirstOutpriorizer:给定两个流文件,首先到达连接的流文件将首先被处理。

    OldestFlowFileFirstPrioritizer:给定两个流文件,将首先处理数据流中最旧的一个这是在未选择优先顺序时使用的默认方案。”

    2 回复  |  直到 6 年前
        1
  •  10
  •   Bryan Bende    6 年前

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

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

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

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

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

    您可以想象,一些流文件来自流的不同部分,与其他流文件相比,这些流文件的处理时间要长一些,但它们最终都会进入同一队列,因此这些来自较长处理部分的流文件被视为较旧的流文件。

        2
  •  6
  •   Andy    6 年前

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

    NiFi flow demonstrating prioritization scenarios

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

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

    如果 清洁的 关系和 成功 从“清理数据”到“处理数据”的关系,您将无法控制这些流文件的处理顺序。但是,由于有一个漏斗可以合并这些队列,因此您可以在 已排队 排队,并控制该顺序。您是希望第一个流文件进入先处理的队列,还是希望先处理之前输入NiFi的流文件,即使输入了 此特定队列 更新的流文件之后?

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