flink:清除进程窗口函数数据

vx6bjr1n  于 2021-06-26  发布在  Flink
关注(0)|答案(1)|浏览(455)

我需要在Flink有一个聚集窗口。我不能使用聚合函数。因为getresult计算需要状态访问。所以我试着用聚合和过程:

.aggregate( 
    new AggregateFunction<Entry, Double, Double>() {
                       ...........
                    };
            , new ProcessWindowFunction<Double,Result,Entry,TimeWindow>() {

                @Override
                public void process(Entry item,
                        ProcessWindowFunction<Double, Result, Entry, TimeWindow>.Context ctx,
                        Iterable<Double> aggInput, Collector<Result> output) throws Exception {

                }

    }

但是,我仍然只需要agginput的最新值,而且我不认为有理由将其保存在内存中,在我的应用程序中,它可能是数以百万计的数据。所以我想如果我能清除每次窗口的数据。

qc6wkl3g

qc6wkl3g1#

当你把一个 AggregateFunction 用一个 ProcessWindowFunction ,只有聚合的最新值保持在窗口状态,并且发送到process方法的iterable将只包含一个预聚合的条目(一 ReduceFunction 将以同样的方式工作。)
换句话说,您正在寻找的优化已经存在。文档有更多的细节。

相关问题