2

我每五分钟运行一次饲料,并使用加载/释放蜂巢水印功能。考虑一个作业执行时间超过 5 分钟并且没有发生水印提交的场景。

在这种情况下,Kylo 会启动另一个带有旧水印的提要实例,还是会等待提交发生?

4

3 回答 3

3

回答您的具体问题:

如果您的LoadHighWaterMark处理器是 Feed 流中的第一个处理器(常见情况),那么当水印处于活动状态 5 分钟后它再次唤醒时,它将实际上什么都不做(在删除任何创建的流文件后)并再等待 5 分钟再次安排。处理器将首先让出,但由于典型的让出时间少于 5 分钟,所以不会产生影响。

如果您的LoadHighWaterMark处理器不是流中的第一个,则在 5 分钟唤醒后创建的流文件将重新排队,并且处理器将根据配置产生或惩罚该流文件。每次 Feed 处理时间超过 5 分钟时都会发生这种情况。

所以你的问题的答案是否定的,新的处理不会用旧的水印恢复,而是等待当前水印的提交或不提交而释放。上述两种情况假设了一个关于响应活动水印的典型配置,并且您的提要行为正常,但处理特定批次的数据只需要超过 5 分钟。

请注意,如果您的提要处理其数据的平均时间超过 5 分钟,那么明智的做法是将提要的计划更改为高于 5 分钟的值,这样处理器的队列就不会得到备份。同样,仅当LoadHighWaterMark不是第一个处理器时才需要这样做。

一般行为:

如果当前正在处理由LoadHighWaterMarkReleaseHighWaterMark处理器限制的 Feed 的 NiFi 流部分内的流文件,则在当前处理流文件通过ReleaseHighWaterMark处理器退出该部分之前,没有其他流文件可以进入该流部分;水印是否被提交。您的流程序列被视为关键部分。这就是为什么每条流路径,无论是成功路径还是失败路径,都必须通过某种ReleaseHighWaterMark

现在,当您的提要唤醒并尝试在水印处于活动状态时处理新的流文件时,NiFi 流行为取决于您的流中LoadHighWaterMark的位置及其配置。Active Water Mark Strategy设置会影响处理器在水位标记处于活动状态时到达流文件时的行为:

  • YIELD - 流文件将被删除(如果是第一个处理器)或重新排队,并且处理器将在其指定的屈服时间内屈服
  • PENALIZE - 流文件将受到惩罚;导致它重新排队
  • ROUTE - 流文件将立即被路由到activeFailure关系

请注意,如果LoadHighWaterMark处理器是流中的第一个处理器(不涉及队列) ,则PENALIZE没有意义。因此将Active Water Mark Strategy设置为PENALIZE将被视为已设置为YIELD

另一个影响行为的配置设置是Max Yield Count此值指定在将流文件路由到activeFailure关系之前应尝试加载和处理活动水位标记的次数。因此,在您的场景中,如果最大计数设置为 3,并且当前的提要处理时间超过 20 分钟(5 分钟 X 4),那么从第四个开始的所有流文件将立即路由到activeFailure直到处于活动状态水印处理完毕。此时,尝试计数重置回 0,并且下一个到达的流文件将使用新的水位标记值开始处理。

于 2017-02-19T22:48:32.223 回答
1

如果水印处于活动状态(即流文件加载了水印并正在处理它,但尚未释放它),则尝试再次加载相同水印的新流文件将被阻止。它将等待活动水印被释放(通过提交或拒绝)。

您可以通过“ LoadHighWaterMark ”处理器上的“ Active Water Mark Strategy ”属性来控制此行为。在处理卡住或花费比预期更长的时间时,这些可以提供帮助。如果策略设置为“ Yield ”,则处理器将在 watermark 处于活动状态时让步。产量发生的次数是通过处理器属性“最大产量计数”配置的。一旦达到此产量计数,处理器会将流文件路由到“ ActiveFailure ”关系。可以通过处理器上的Settings -> Yield Duration 设置每个产量的持续时间。如果策略设置为“路线”,ActiveFailure的关系。

注意在叶子SuccessFailureActiveFailure关系中使用“ ReleaseHighWaterMark ”处理器。它支持两种模式——提交拒绝

于 2017-02-18T06:32:35.667 回答
0

我需要确认这一点,但我的理解是,新的高水位线只有在当前的高水位线发布后才会运行。确保所有“成功”和“失败”关系都以 ReleaseHighWaterMark 处理器结束,这一点很重要。否则,您的提要最终可能会处于不一致的状态,即尚未发布高水位线但无法加载新的高水位线。

于 2017-02-18T00:19:23.917 回答