Flink 在没有窗口的键控流上进行缩减

cod*_*ion 5 apache-flink

我阅读了源代码,reduce会将每个结果转发到下游。


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

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

Run Code Online (Sandbox Code Playgroud)

如果在窗口上进行reduce,当watermark到达时,flink会将元素转发给下游,那么flink如何在没有窗口的情况下确定reduce完成。

Eze*_*iel 3

根据官方文档https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/

\n\n
\n

减少\n KeyedStream \xe2\x86\x92 DataStream

\n\n

对键控数据流进行“滚动”缩减。将当前\n 元素与最后减少的值组合并发出新值。

\n\n

窗口缩小\n WindowedStream \xe2\x86\x92 DataStream

\n\n

将函数式归约函数应用于窗口返回归约后的值。

\n
\n\n

主要区别在于:

\n\n
    \n
  • reduce在窗口中完成时,该函数将当前值与窗口值相结合。
  • \n
  • reduce在 KeyedStream 中完成时,该函数会将当前值与最新值组合起来。
  • \n
\n