0

我有一个始终是一个应用程序,监听 Kafka 流并处理事件。事件是会话的一部分。我需要根据会话数据进行计算。由于我的会话时间长,我在尝试正确运行我的计算时遇到了问题。我 90% 的课程在 5 分钟后完成。99% 在 1 小时后完成。会话可能持续一天以上,由于这是一个实时系统,没有确定的结束。会话是独一无二的,并且显示永远不会发生冲突。

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

我以前认为allowedLateness可以让我这样做,但似乎迟到只在应该处理事件时才考虑,它不会扩展实际的窗口。 GlobalWindows也可以工作,但我不确定是否有办法多次处理一个窗口。我相信我可以在一段时间不活动后使用evictorwithGlobalWindows来清除 Windows(尽管我承认,我还没有研究过这个,因为我不确定如何GlobalWindow多次触发。

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

4

1 回答 1

0

如果SessionWindows不能完成这项工作,那么您可以使用GlobalWindows自定义TriggerEvictor. Trigger 接口具有 onElement 和基于计时器的回调,可以根据需要随时触发。如果你沿着这条路线走,那么是的,你还需要实现一个 Evictor 来在不再需要元素时处理它们。

文档源代码在尝试了解这一切如何组合在一起时很有帮助。

于 2018-05-25T10:21:43.217 回答