在Nifi中,FirstInFirstOutPrioritizer和OldestFlowFileFirstPrioritizer有什么区别
In Nifi, what is the difference between FirstInFirstOutPrioritizer and OldestFlowFileFirstPrioritizer
用户指南 https://nifi.apache.org/docs/nifi-docs/html/user-guide.html 有以下关于优先级的详细信息,请您帮助我了解它们的不同之处并提供任何实时示例。
FirstInFirstOutPrioritizer:给定两个FlowFiles,第一个到达连接的将首先被处理。
OldestFlowFileFirstPrioritizer:给定两个 FlowFile,数据流中最旧的将首先处理。 'This is the default scheme that is used if no prioritizers are selected.'
假设两个处理器 A 和 B 都连接到漏斗,然后漏斗连接到处理器 C。
场景 1 - 漏斗与处理器 C 之间的连接具有 first-in-first-out 个优先级。
在这种情况下,漏斗和连接 C 之间的队列中的流文件将严格按照它们到达队列的顺序进行处理。
场景 2 - 漏斗与处理器 C 之间的连接具有 oldest-flow-file-first 优先级。
在这种情况下,漏斗和连接 C 之间的队列中可能已经有流文件,但是其中一个处理器将流传输到该队列,该队列比该队列中的所有流文件都旧,它将跳到最前面。
你可以想象一些流文件来自流的不同部分,比其他流文件需要更长的时间来处理,但它们最终都汇集到同一个队列中,所以这些流文件来自更长的处理时间部分被认为是旧的。
Apache NiFi 处理来自许多不同来源的数据,并可以将其路由到许多不同的处理器。让我们使用以下示例(忽略处理器类型,只关注标题):
首先,根据source/ingestion点的不同,传入数据的相对速率可能会有所不同。在这种情况下,数据库轮询每分钟进行一次,而 HTTP 轮询每 5 秒一次,文件拖尾每秒一次。因此,即使数据库记录比另一个数据库记录长 59 秒 "older",如果它们在处理器的同一执行中被捕获,它们将同时进入 NiFi 并且流文件(取决于拆分)将具有同一个起源时间。
如果一些数据进入系统 "is dirty",它会被路由到 "cleans" 它的处理器。这个处理器需要 3 秒来执行。
如果 clean 关系和 "Clean Data" 的 success 关系都直接转到 "Process Data",你将无法控制这些流文件的处理顺序。但是,因为有一个合并这些 queue 的漏斗,您可以在 queued queue 上选择一个优先顺序,并控制该顺序.您是希望第一个流文件首先进入 queue 处理,还是希望先处理较早进入 NiFi 的流文件,即使他们输入了 这个特定的 queue 在更新的流文件之后?
这是一个人为的示例,但您可以将其应用于灾难恢复情况,其中某些数据一度丢失 window 现在正在恢复,或者处理 time-sensitive 数据的流程一段时间后,这些见解将无效。如果使用背压或大批量(慢速)获取数据,您会发现在某些情况下,最早的优先顺序的价值较低,反之亦然。
用户指南 https://nifi.apache.org/docs/nifi-docs/html/user-guide.html 有以下关于优先级的详细信息,请您帮助我了解它们的不同之处并提供任何实时示例。
FirstInFirstOutPrioritizer:给定两个FlowFiles,第一个到达连接的将首先被处理。
OldestFlowFileFirstPrioritizer:给定两个 FlowFile,数据流中最旧的将首先处理。 'This is the default scheme that is used if no prioritizers are selected.'
假设两个处理器 A 和 B 都连接到漏斗,然后漏斗连接到处理器 C。
场景 1 - 漏斗与处理器 C 之间的连接具有 first-in-first-out 个优先级。
在这种情况下,漏斗和连接 C 之间的队列中的流文件将严格按照它们到达队列的顺序进行处理。
场景 2 - 漏斗与处理器 C 之间的连接具有 oldest-flow-file-first 优先级。
在这种情况下,漏斗和连接 C 之间的队列中可能已经有流文件,但是其中一个处理器将流传输到该队列,该队列比该队列中的所有流文件都旧,它将跳到最前面。
你可以想象一些流文件来自流的不同部分,比其他流文件需要更长的时间来处理,但它们最终都汇集到同一个队列中,所以这些流文件来自更长的处理时间部分被认为是旧的。
Apache NiFi 处理来自许多不同来源的数据,并可以将其路由到许多不同的处理器。让我们使用以下示例(忽略处理器类型,只关注标题):
首先,根据source/ingestion点的不同,传入数据的相对速率可能会有所不同。在这种情况下,数据库轮询每分钟进行一次,而 HTTP 轮询每 5 秒一次,文件拖尾每秒一次。因此,即使数据库记录比另一个数据库记录长 59 秒 "older",如果它们在处理器的同一执行中被捕获,它们将同时进入 NiFi 并且流文件(取决于拆分)将具有同一个起源时间。
如果一些数据进入系统 "is dirty",它会被路由到 "cleans" 它的处理器。这个处理器需要 3 秒来执行。
如果 clean 关系和 "Clean Data" 的 success 关系都直接转到 "Process Data",你将无法控制这些流文件的处理顺序。但是,因为有一个合并这些 queue 的漏斗,您可以在 queued queue 上选择一个优先顺序,并控制该顺序.您是希望第一个流文件首先进入 queue 处理,还是希望先处理较早进入 NiFi 的流文件,即使他们输入了 这个特定的 queue 在更新的流文件之后?
这是一个人为的示例,但您可以将其应用于灾难恢复情况,其中某些数据一度丢失 window 现在正在恢复,或者处理 time-sensitive 数据的流程一段时间后,这些见解将无效。如果使用背压或大批量(慢速)获取数据,您会发现在某些情况下,最早的优先顺序的价值较低,反之亦然。