Flink:仅在会话窗口结束时进行计算

问题描述 投票:0回答:1

我有一个AggregateFunction,它计算WindowedStream中一系列事件的平均值。需要注意的是,需要对可能无序到达(或根本不到达)的事件对计算平均值。

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

我可以使用getResult API来执行此操作,但是在窗口中的每个事件上都会调用此函数,这对性能没有意义。我也可以使用flink-cep执行此操作,但出于相同的原因,我想避免执行此操作。

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

是否有某种处理程序?我找到的最接近的东西是triggers,但是没有关闭窗口的方法。

谢谢

编辑:

我最终使用了ProcessWindowFunction with Incremental Aggregation

ProcessWindowFunction可以与ReduceFunction结合使用,一个AggregateFunction或FoldFunction以增量聚合元素到达窗口时。关闭窗口后,聚合结果将提供给ProcessWindowFunction。这样,它就可以在可以访问的同时递增计算窗口ProcessWindowFunction的其他窗口元信息。

我有一个AggregateFunction,它可以计算WindowedStream中一系列事件的平均值。需要注意的是,需要对事件对计算平均值,而事件对可能超出...

apache-flink flink-streaming
1个回答
0
投票

代替AggregateFunction,您可以使用ProcessWindowFunction而不进行增量聚合。触发窗口时将调用此函数,并将传递包含窗口内容的Iterable和可用于发出结果的Collector。

© www.soinside.com 2019 - 2024. All rights reserved.