Flink:当ProcessAllWindowFunction花费的时间超过windowAll()中定义的TumblingProcessingTimeWindows时会发生什么情况 [英] Flink: What happens when ProcessAllWindowFunction takes more time than the TumblingProcessingTimeWindows defined in windowAll()
本文介绍了Flink:当ProcessAllWindowFunction花费的时间超过windowAll()中定义的TumblingProcessingTimeWindows时会发生什么情况的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个ProcessAllWindowFunction实现(请参阅下面代码中的AttributeBackLogEvents()),它有相当多的I/O,可能需要30秒以上。windowAll()正在使用30秒的TumblingProcessingTimeWindows对数据进行窗口化。
attributedStream
.windowAll(TumblingProcessingTimeWindows.of(Time.seconds(30)))
.process(new AttributeBackLogEvents())
.forceNonParallel()
.addSink(ConfluentKafkaSink.createKafkaSinkFromApplicationProperties())
.name("Enriched Event kafka topic sink");
AttributeBackLogEvents根据传递的迭代量从MySQL获取一组事件,经过处理后删除部分MySQL获取的事件。我看到当前窗口正在获取的记录(理想情况下,应该在下一个窗口触发之前删除)也会被下一个窗口获取,这意味着即使当前窗口正在处理,下一个窗口也会被触发。
我的问题是:
- AttributeBackLogEvents是否仍在运行并且触发下一个窗口?
- 如果是,那么如何强制执行该操作,直到当前窗口处理完成,下一个窗口不应触发。
推荐答案
此Q不描述逻辑中发生的情况,但在概念上: 您的窗口意味着"源数据的时间范围",因此在下一个窗口开始之前,对此的任何处理都无法完全完成。
可能有一种方法,但对于流工具,MySQL之类的源通常被视为参考数据(您通常希望经常阅读),除非您正在进行更改数据捕获。
这篇关于Flink:当ProcessAllWindowFunction花费的时间超过windowAll()中定义的TumblingProcessingTimeWindows时会发生什么情况的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文