我们可以将Flink中的两者和计数以及处理时间组合在一起吗?

时间:2017-06-06 05:57:07

标签: apache-flink flink-streaming

我希望在计数达到100或每5秒完成翻滚过程时间后完成Windows?也就是说,当元素达到100时,触发Windows计算,​​但是如果元素没有达到100,但是时间超过5秒,它也会触发Windows计算,​​就像下面两个触发器的组合一样:

.countWindow(100)

.window(TumblingProcessingTimeWindows.of(Time.seconds(5)))

1 个答案:

答案 0 :(得分:2)

使用当前的Flink API,没有超级简单的方法可以做到这一点。

您的用例需要状态(用于计数)和计时器的组合。您可以使用自定义Trigger或使用ProcessFunction来完成此操作。

对于使用Windows加上自定义触发器的方法,查看ProcessingTimeTrigger和CountTrigger的implementations将会很有帮助,因为您基本上想要将两者混合。

ProcessFunction是一个较低级别的构建块,它将托管状态与计时器结合在一起,这正是您所需要的,因此这可能更容易,尤其是如果您已经知道如何使用Flink's managed state

BTW,online Flink training materials包括用于实现自定义触发器和使用ProcessFunction的幻灯片和练习。

触发器:slidesexercise
ProcessFunction:slidesexercise