Apache flink Apache Flink中是否存在每分钟对延迟数据触发一次的触发器?
我的Flink作业中有很多延迟事件,因此使用TumblingEventTimeWindows将延迟时间设置为10分钟,并在每个窗口上运行一个复杂的AggregateFunction 似乎在每一个延迟事件上都会发生聚合,但我想减少触发频率 有没有只在每分钟触发的触发器? 触发器是否会影响延迟事件? 是否存在仅对后期事件有效的触发器?Apache flink Apache Flink中是否存在每分钟对延迟数据触发一次的触发器?,apache-flink,flink-streaming,windowing,Apache Flink,Flink Streaming,Windowing,我的Flink作业中有很多延迟事件,因此使用TumblingEventTimeWindows将延迟时间设置为10分钟,并在每个窗口上运行一个复杂的AggregateFunction 似乎在每一个延迟事件上都会发生聚合,但我想减少触发频率 有没有只在每分钟触发的触发器? 触发器是否会影响延迟事件? 是否存在仅对后期事件有效的触发器? 我想澄清一下,我在下面提到的晚期事件,是那些仍然在你设定的允许范围内的晚期事件 有没有只在每分钟触发的触发器 不可以。但是您可以自定义自己的触发器,请尝试使用事件计时
我想澄清一下,我在下面提到的晚期事件,是那些仍然在你设定的允许范围内的晚期事件 有没有只在每分钟触发的触发器 不可以。但是您可以自定义自己的触发器,请尝试使用事件计时器服务来实现这一点 触发器是否会影响延迟事件 对。延迟事件将通过调用OneElement函数在触发器中引用 是否存在仅对后期事件有效的触发器 您可以在自定义触发器中过滤延迟事件,如下所示:
if (window.maxTimestamp() <= ctx.getCurrentWatermark()) {
return TriggerResult.FIRE;
你可以用你想要的任何行为来实现一个定制 如果您查看EventTimeTrigger的实现,它是翻滚事件时间窗口的默认触发器
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;
}
}
您将看到,每当在流的水印达到或超过窗口的端点后将事件分配给窗口时,触发器就会返回FIRE。这就是为什么每一个延迟事件都会导致另一次触发
另一种方法是不允许延迟,而是将延迟事件收集到自己的流中,然后独立处理延迟事件。我认为最好的方法是使用实现,谢谢,@David。我使用EventTimeTrigger作为引用,可以使用ValueStateDescriptor创建自定义触发器。