我看了源代码,reduce会把每个结果都写到下游。
我想在没有窗口的情况下按键减少流,
stream.keyBy(key)
.reduce((a, b) -> {
//reduce
return a+b;
});
如果在窗口上减少,Flink 会在水印到达时将 forword 元素到下游,那么 flink 如何确定在没有窗口的情况下减少完成。
根据官方文档 https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/
减少KeyedStream → DataStream
键控数据流上的"滚动"减少。结合电流 元素,并发出新值。
窗口减少窗口流→数据流
将函数化简函数应用于窗口并返回 价值降低。
主要区别在于:
- 在窗口中完成
reduce
时,该函数将当前值与窗口值组合在一起。 - 在 KeyedStream 中完成
reduce
时,该函数会将当前值与最新值组合在一起。
对于流处理,通常不会有计算"完成"的想法。他们只是无限期地继续下去。只要您让作业保持运行,非窗口化缩减就会继续减少。