Apache flink 在没有窗口的键控流上使用Flink reduce

Apache flink 在没有窗口的键控流上使用Flink reduce,apache-flink,Apache Flink,我读了源代码,将forword的每一个结果减少到下游 我想在没有窗口的情况下按键减少流 stream.keyBy(key) .reduce((a, b) -> { //reduce return a+b; }); 若在窗口上减少,当水印到达时,flink将把元素转发到下游,那个么flink如何确定无窗口减少完成 根据官方文件 减少 键流→ 数据流 键控数据流上的“滚动”减少

我读了源代码,将forword的每一个结果减少到下游


我想在没有窗口的情况下按键减少流

    stream.keyBy(key)
          .reduce((a, b) -> {
                //reduce
                return a+b;
          });


若在窗口上减少,当水印到达时,flink将把元素转发到下游,那个么flink如何确定无窗口减少完成

根据官方文件

减少 键流→ 数据流

键控数据流上的“滚动”减少。结合当前 元素具有上次减小的值,并发出新值

窗口缩小 窗口流→ 数据流

将函数reduce函数应用于窗口,并返回 降低价值

关键区别在于:

  • 当在窗口中执行
    reduce
    时,该函数将当前值与窗口值相结合
  • 当在KeyedStream中执行
    reduce
    时,该函数将当前值与最新值相结合

对于流处理,通常不认为计算“完成”。他们只是无限期地继续前进。只要您保持作业运行,非窗口reduce就一直在减少