Apache flink Flink:仅在会话窗口结束时计算

Apache flink Flink:仅在会话窗口结束时计算,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我有一个计算a中一系列事件平均值的函数。 这里需要注意的是,需要计算事件对的平均值,这些事件对可能无序到达(或者根本没有) 换句话说,我需要在计算之前对数据进行排序,因为序列很重要 我可以用API来实现这一点,但是这个函数在窗口中的每个事件上都被调用,这在性能方面没有意义。 我也可以这样做,但出于同样的原因,我想避免这样做 理想情况下,当窗口关闭时,我只想在最后计算平均值(在这里我可以对数据进行一次排序) 这有什么处理程序吗?我找到的最接近的东西是,但没有关闭窗口的方法。 谢谢 编辑: 我最终使

我有一个计算a中一系列事件平均值的函数。
这里需要注意的是,需要计算事件对的平均值,这些事件对可能无序到达(或者根本没有)

换句话说,我需要在计算之前对数据进行排序,因为序列很重要

我可以用API来实现这一点,但是这个函数在窗口中的每个事件上都被调用,这在性能方面没有意义。 我也可以这样做,但出于同样的原因,我想避免这样做

理想情况下,当窗口关闭时,我只想在最后计算平均值(在这里我可以对数据进行一次排序)

这有什么处理程序吗?我找到的最接近的东西是,但没有关闭窗口的方法。

谢谢

编辑:
我最终使用了

ProcessWindowFunction可以与ReduceFunction或, 要增量聚合的AggregateFunction或FoldFunction 元素到达窗口时。当窗口关闭时 ProcessWindowFunction将提供聚合结果。 这允许它在访问windows的同时以增量方式计算windows ProcessWindowFunction的附加窗口元信息


您可以使用无需增量聚合的聚合函数,而不是AggregateFunction。触发窗口时将调用此函数,并将传递一个包含窗口内容的Iterable和一个可用于发出结果的收集器


调用ProcessWindowFunction时,您可以对内容进行排序,并生成所需的任何输出。

对于流式数据,“在最末端”是什么意思?@kkrugler在窗口末端,而不是流的末端。这是一个键控窗口,所以在每个“窗口末端”。感谢您的澄清,我在这里没有看到任何时间的提及,所以我担心您在定义末端时考虑了其他触发因素。