扩展窗口

时间:2018-05-24 15:03:35

标签: apache-flink flink-streaming windowing

我总是有一个应用程序,听Kafka流,并处理事件。事件是会话的一部分。我需要根据会话数据进行计算。由于会话的长度,我遇到了试图正确运行计算的问题。我的会话的90%在5分钟后完成。 1小时后完成99%。会话可能会持续一天以上,因为这是一个实时系统,没有确定的结束。会话是独一无二的,展示永不碰撞。

我正在寻找一种可以多次处理窗口的方法,可以是初始等待时间,也可以是之后处理任何后续事件,或者是每个事件类型结构的纯进程。我需要保留所有先前的事件(ListState),以及先前处理的值(ValueState)。

我以前认为allowedLateness允许我这样做,但似乎迟到只考虑事件应该处理的时候,它不会扩展实际的窗口。 GlobalWindows也可以使用,但我不确定是否有办法多次处理窗口。我相信我可以使用evictorGlobalWindows在一段时间不活动后清除Windows(尽管我承认,我还没有对此进行研究,因为我不确定如何触发{{1}多次。

如何实现我想要做的任何建议将不胜感激,我也很乐意澄清所需的任何要点。

1 个答案:

答案 0 :(得分:0)

如果SessionWindows无法胜任,那么您可以将GlobalWindows与自定义TriggerEvictor一起使用。 Trigger接口具有onElement和基于计时器的回调,可以随时随地触发。如果沿着这条路走下去,那么是的,你还需要实现一个Evictor来处理不再需要的元素。

documentationsource code在尝试理解这一切是如何组合在一起时非常有用。