我有饲料运行在每五分钟,并使用加载/释放蜂箱水标记功能。考虑这样一种情况:作业执行时间超过5分钟,而水标记提交没有发生。
在这种情况下,Kylo会使用旧的水标记启动另一个feed实例,还是等待提交发生?
发布于 2017-02-18 06:32:35
如果水印是活动的(即加载水印的流文件并正在处理它,但尚未释放它),尝试再次加载相同水印的新流文件将被阻止。它将等待主动水印的释放(通过提交或拒绝)。
您可以通过'LoadHighWaterMark‘处理器上的“活动水标记策略”属性对此行为进行控制。在处理被拖延或花费的时间比预期的时间更长的情况下,这些方法可能会有所帮助。如果该策略被设置为“产生”,则如果水印是活动的,处理器将产生水印。产量发生的次数是通过处理器属性‘最大屈服计数’配置的。一旦达到此产量计数,处理器将将流文件路由到'ActiveFailure‘关系。每个产量的持续时间可以通过设置处理器上的->产量持续时间来设置。如果策略被设置为“'ActiveFailure‘路由”,处理器将立即将流文件路由到关系。
小心使用'ReleaseHighWaterMark‘处理器在叶子Success、Failure和ActiveFailure关系中。它支持两种模式--提交和拒绝。
发布于 2017-02-19 22:48:32
回答您的具体问题:
如果您的LoadHighWaterMark处理器是提要流中的第一个处理器(常见情况),那么当它在水标记活动5分钟后再次醒来时,它将有效地什么也不做(在删除任何创建的流文件之后),然后再等待5分钟才能再次调度。处理器将首先产生,但是,由于典型的产量时间小于5分钟,产量是不可挽回的。
如果您的LoadHighWaterMark处理器不是流中的第一个,那么在5分钟唤醒后创建的流文件将重新排队,处理器将根据配置产生或惩罚该流文件。每次饲料处理时间超过5分钟时,都会发生这种情况。
因此,您的问题的答案是no,新的处理将不再使用旧的水标记,而是将等待当前水标的提交或释放而不提交。以上两种情况假设了对活动水标记的响应的典型配置,并且您的提要行为正常,但只需超过5分钟就可以处理特定的一批数据。
请注意,如果您的提要平均需要超过5分钟来处理其数据,那么最好将提要的调度更改为大于5分钟的值,这样处理器的队列就不会被备份。同样,只有当LoadHighWaterMark不是第一个处理器时,这才是必要的。
一般行为:
如果当前在由LoadHighWaterMark和ReleaseHighWaterMark处理器限制的Feed的NiFi流部分中处理流文件,则在当前处理流文件通过一个ReleaseHighWaterMark处理器退出该部分之前,其他任何流文件都不得进入该流的该部分;无论是否提交了水标记。您的流程的这个序列被视为一个关键部分。这就是为什么每个流路径,无论是成功路径还是失败路径,都必须通过某种类型的ReleaseHighWaterMark。
现在,当您的提要醒来并试图在水标记处于活动状态时处理一个新的流文件时,LoadHighWaterMark流行为由您的流中NiFi的位置及其配置决定。当水标记处于活动状态时,活动水标记策略设置会影响处理器在流文件到达时的行为:
注意,如果LoadHighWaterMark处理器是流中的第一个处理器,则惩罚是没有意义的(不涉及队列)。因此,将活动水标识策略设置为惩罚将被视为设置为收益率。
另一个影响行为的配置设置是最大产量计数。此值指定在流文件路由到activeFailure关系之前应尝试加载和处理活动水标记的次数。因此,在您的场景中,如果最大计数设置为3,并且当前的提要处理时间超过20分钟(5分钟)。然后,所有从第四个流文件开始的流文件将立即路由到activeFailure,直到活动水标处理完成为止。此时,尝试计数被重置为0,下一个到达的流文件将开始使用新的水标记值进行处理。
发布于 2017-02-18 00:19:23
我需要证实这一点,但我的理解是,一个新的高水标记将运行,只有在当前的高水标记发布。确保所有“成功”和“失败”关系都以ReleaseHighWaterMark处理器结束是很重要的。否则,您的提要可能会以一个不一致的状态结束,高水标记还没有被释放,但是一个新的高水标记无法加载。
https://stackoverflow.com/questions/42295214
复制相似问题