首页 > 解决方案 > Flink减少没有窗口的键控流

问题描述

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


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

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

如果在window上reduce,当watermark到达时flink会将元素转发到下游,那么flink如何确定没有window的reduce完成。

标签: apache-flink

解决方案


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

减少 KeyedStream → DataStream

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

窗口缩减 WindowedStream → DataStream

将函数化约简函数应用于窗口并返回约简值。

关键区别在于:

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

推荐阅读