public TriggerResult onElement(Object element, long timestamp, TimeWindow window, TriggerContext ctx) throws Exception {
if (window.maxTimestamp() <= ctx.getCurrentWatermark()) {
// if the watermark is already past the window fire immediately
return TriggerResult.FIRE;
} else {
ctx.registerEventTimeTimer(window.maxTimestamp());
return TriggerResult.CONTINUE;
}
}
3条答案
按热度按时间pw136qt21#
在我看来,最好的方法是实现进程功能与自定义水印。
jk9hmnmh2#
你可以用你想要的任何行为实现一个定制触发器。
如果你看看
EventTimeTrigger
,翻转事件时间窗口的默认触发器,您将看到,每当在流的水印达到或超过窗口的结尾之后,事件被分配给窗口时,触发器就会返回fire。这就是为什么每一个迟发事件都会引发另一次触发。
另一种方法是不允许延迟,而是将延迟事件收集到它们自己的流中(使用一个side输出),然后独立地处理延迟事件。
5vf7fwbs3#
只是澄清一下,我在下面提到的晚期事件,是那些晚期事件仍然在你设定的允许范围内。
有没有哪种触发器只在每分钟触发?
不可以。但是您可以自定义自己的触发器,请尝试使用事件计时器服务来实现这一点。
触发因素对后期事件有影响吗?
对。通过调用onelement函数,将在触发器中引用延迟事件。
是否存在只对后期事件有效的触发因素?
您可以按如下方式过滤自定义触发器中的延迟事件: