apache-flink - Flink减少没有窗口的键控流
问题描述
我阅读了源代码,reduce 会将每个结果转发给下游。
我想在没有窗口的情况下按键减少流,
stream.keyBy(key)
.reduce((a, b) -> {
//reduce
return a+b;
});
如果在window上reduce,当watermark到达时flink会将元素转发到下游,那么flink如何确定没有window的reduce完成。
解决方案
根据官方文档https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/
减少 KeyedStream → DataStream
对键控数据流的“滚动”减少。将当前元素与最后减少的值组合并发出新值。
窗口缩减 WindowedStream → DataStream
将函数化约简函数应用于窗口并返回约简值。
关键区别在于:
- 当
reduce
在窗口中完成时,该函数将当前值与窗口值组合在一起。 - 当
reduce
在 KeyedStream 中完成时,该函数将当前值与最新值结合起来。
推荐阅读
- angular - Angular9 debugElement.classes['my-class'] 现在返回 undefined
- ios - sceneView.delegate 和 sceneView.session.delegate 有什么区别?
- reactjs - 如何测试使用 React Hooks useHistory hook 和 Enzyme 的 React 组件?
- javascript - AddEventListener 到 svg 文件,而不是使其可点击的按钮
- multithreading - Allure 支持运行线程测试
- php - 无法在存档页面上显示侧边栏(Wordpress、Elementor Pro+GeneratePress)
- android - 重新启用定位服务
- youtube-api - 使用“mine”参数向 /youtube/v3/channels 请求返回一个空列表
- python - 将 Python 字典中的 JSON 值累积为数组
- javascript - Javascript - 无法访问 HTMLCollection 的项目?