2017-06-06 61 views
1

我希望在计数达到100次或每5秒翻转处理时间后使Windows完成?也就是说,当元素达到100时,触发Windows计算,​​但是如果元素没有达到100,但时间经过5秒,它也会触发Windows计算,​​就像下面两个触发器的组合一样:我们可以在Flink中结合两者并计数和处理时间触发器吗?

.countWindow(100)

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

回答

1

有没有超级简单方式与当前弗林克API来做到这一点。

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

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

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

顺便说一句,online Flink training materials包括幻灯片和练习用于实现自定义触发器和使用ProcessFunction。

触发器:slidesexercise
ProcessFunction:slidesexercise

+0

非常感谢你对你的好心帮,我会做你的材料的一些检查,并且将反应在这里,如果我有一些困难。 –

+0

我注意到你的例子http://dataartisans.github.io/flink-training/dataStream/5-intro.html与https://ci.apache.org/projects/flink/的官方例子不同flink-docs-release-1.3/dev/stream/process_function.html的函数onTimer,在官方的例子中有timestamp == result.lastModified + XXX),但是在你的例子中没有XXX。 –

+0

也可以问一下ctx.timestamp()是什么意思?从哪里来,何时分配给ctx?从官方的例子看来,ctx.timestamp()每60秒更改一次,它是一个水印吗? –

相关问题