我有一个AggregateFunction ,它计算WindowedStream中一系列事件的平均值。
这里需要注意的是,需要对可能乱序(或根本不乱序)到达的事件对计算平均值。
换句话说,我需要在计算之前对数据进行排序,因为顺序很重要。
我可以使用getResult API 来做到这一点,但是在窗口中的每个事件上都会调用这个函数,这在性能方面没有意义。我也可以用flink-cep做到这一点,但出于同样的原因我想避免它。
理想情况下,我只想在窗口关闭时计算最后的平均值(我可以对数据进行一次排序)。
是否有某种处理程序?我发现最接近的东西是triggers,但没有关闭窗口的方法。
谢谢
编辑:
我最终使用带有增量聚合的 ProcessWindowFunction
ProcessWindowFunction 可以与 ReduceFunction、AggregateFunction 或 FoldFunction 组合,以在元素到达窗口时递增地聚合元素。当窗口关闭时,将向 ProcessWindowFunction 提供聚合结果。这允许它在访问 ProcessWindowFunction 的附加窗口元信息的同时增量计算窗口。