Apache flink Apache Flink:如何使用本地预聚合计算windows?

Apache flink Apache Flink:如何使用本地预聚合计算windows?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我有一个数据流,需要在上面计算一个窗口聚合。当我执行常规窗口聚合时,网络IO非常高。 因此,我希望执行本地预聚合以减少网络IO 我想知道是否可以在任务管理器上本地预聚合(即,在洗牌记录之前),然后执行完整聚合。Flink的DataStream API是否可以实现这一点 我的代码是: DataStream<String> dataIn = .... dataIn .map().filter().assignTimestampsAndWatermarks() .keyBy().

我有一个
数据流
,需要在上面计算一个窗口聚合。当我执行常规窗口聚合时,网络IO非常高。 因此,我希望执行本地预聚合以减少网络IO

我想知道是否可以在任务管理器上本地预聚合(即,在洗牌记录之前),然后执行完整聚合。Flink的DataStream API是否可以实现这一点

我的代码是:

DataStream<String> dataIn = .... 
dataIn
  .map().filter().assignTimestampsAndWatermarks()
  .keyBy().window().fold()
datastreamdatain=。。。。
达坦
.map().filter().assignTimestampsAndWatermarks()
.keyBy().window().fold()

当前版本的Flink(Flink 1.4.0,2017年12月)没有内置对预聚合的支持。但是,在下一个版本(1.5.0)中添加此功能的工作正在进行中,请参阅

您可以基于应用程序实现预聚合操作。
ProcessFunction
可以将预聚合保存在
HashMap
(大小固定)内存中,并注册计时器(事件时间和处理时间)以定期发出预聚合。状态(即
HashMap
的内容)应保持不变,以防止出现故障时数据丢失。设置计时器时,需要遵守窗口边界

请注意,
FoldFunction
已被弃用,应替换为