Kylo |高水印功能

时间:2017-02-17 10:15:36

标签: kylo

我每隔五分钟就开始运行一次,并使用加载/释放蜂巢水印功能。考虑一种情况,即作业执行时间超过5分钟且水印提交没有发生。

在这种情况下,Kylo会使用旧水印启动另一个Feed实例,还是会等待提交?

3 个答案:

答案 0 :(得分:3)

回答您的具体问题:

如果您的 LoadHighWaterMark 处理器是您的Feed中的第一个处理器(常见情况),那么当它在水印处于活动状态5分钟后再次唤醒时,它将无效地执行任何操作(之后)删除任何已创建的流文件)并再等待5分钟再次安排。处理器将首先产生,但由于典型的产量时间少于5分钟,因此产量是不可逆的。

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

因此,您的问题的答案是 ,新处理将不会恢复旧水印,但会等待当前水印的提交或释放而不提交。上述两种情况假设了一个关于对活动水印的响应的典型配置,并且您的Feed表现正常,但处理特定批次数据的时间超过5分钟。

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

一般行为:

如果当前正在您的 LoadHighWaterMark ReleaseHighWaterMark 处理器限制的Feed的NiFi流的部分内处理流文件,那么没有其他流文件可以进入该部分。直到当前处理流文件通过 ReleaseHighWaterMark 处理器退出该部分;是否承诺水印。您的流程序列被视为关键部分。这就是为什么每个流路径,无论是成功路径还是故障路径,都必须通过某种 ReleaseHighWaterMark

现在,当您的Feed被唤醒并且在水印处于活动状态时尝试处理新的流文件时,NiFi流行为取决于您的流及其配置中 LoadHighWaterMark 的位置。 活动水印策略设置会影响当水印处于活动状态时流文件到达时处理器的行为:

  • YIELD - 将删除流文件(如果是第一个处理器)或重新排队,并且处理器将按指定的生产时间进行生产
  • PENALIZE - 流程文件将受到处罚;导致它重新排队
  • ROUTE - 流量文件将立即路由到 activeFailure 关系

请注意,如果 LoadHighWaterMark 处理器是流中的第一个处理器(不涉及队列), PENALIZE 没有意义。所以设置活动水标记策略 PENALIZE 将被视为设置为 YIELD

影响行为的另一个配置设置是最大收益计数。此值指定在将流文件路由到 activeFailure 关系之前,应尝试加载和处理活动水印的次数。因此,在您的方案中,如果最大计数设置为3,并且当前的Feed处理时间超过20分钟(5分钟X 4),那么从第四个开始的所有流程文件将立即路由到 activeFailure 直到活动水印处理完成。此时,尝试计数重置为0,下一个到达的流文件将以新的水印值开始处理。

答案 1 :(得分:1)

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

您可以通过' 有效水印策略'来控制此行为。 ' LoadHighWaterMark '上的属性处理器。这些可以在处理卡住或花费的时间超过预期的情况下提供帮助。如果策略设置为' 收益',则处理器将在水印处于活动状态时生成。产量发生的次数通过处理器属性' 最大产量计数'进行配置。达到此产量计数后,处理器会将流文件路由到 ActiveFailure '关系。每个产量的持续时间可以通过设置 - >设置。处理器上的产量持续时间。如果策略设置为' 路由',处理器会立即将流文件路由到' ActiveFailure '关系。

注意使用' ReleaseHighWaterMark '叶子处理器成功失败 ActiveFailure 关系。它支持两种模式 - 提交拒绝

答案 2 :(得分:0)

我需要确认一下,但我的理解是,只有当前的高水位赛发布后,新的高水位赛才会出现。确保所有“成功”和“失败”关系都以ReleaseHighWaterMark处理器结束,这一点非常重要。否则,你的饲料最终会处于一种不一致的状态,即高水位标记尚未释放,但无法加载新的高水位标记。