apache-kafka - Kafka Stream Suppress session-windowed-aggregation
问题描述
我在 Kafka 流应用程序中编写了这段代码:
KGroupedStream<String, foo> groupedStream = stream.groupByKey();
groupedStream.windowedBy(
SessionWindows.with(Duration.ofSeconds(3)).grace(Duration.ofSeconds(3)))
.aggregate(() -> {...})
.suppress(Suppressed.untilWindowCloses(unbounded()))
.toStream()...
应该(如果我理解正确的话)在窗口关闭后为每个键发出记录。不知何故,行为如下:
流不会发出第一条记录,即使使用不同的 Key,也只会在第二条记录之后转发它,然后第二条记录仅在第三条之后发出,依此类推..
我已经尝试了多个带有“exactly_once”的 StreamConfig,并且无论有没有缓存,这种行为仍然存在。
在此先感谢您的帮助 !
解决方案
这是预期的行为。请注意,这suppress()
是基于事件时间的。因此,只要没有新数据到达,时间就无法提前,因此提前驱逐记录是错误的,因为无法保证下一条记录可能属于当前窗口。
推荐阅读
- powerbi - 电源BI | Anti-Join (sorta) 表具有不相等的行和列,但共享一个 KEY
- mysql - 使用 SQL 查找累积进度
- time-series - 如何对这个时间序列数据进行回归?任何人都可以帮助我,无论我做对与否
- api - 如何在 Google Tasks API 调用中填写 @me 参数?
- pandas - 使用 Pandas xlsxwriter 添加背景颜色
- flutter - 5 月 1 日之后,我们将如何处理 jcenter() 存储库以及它的替代方案是什么?
- javascript - 'useNavigate' 不是从 'react-router-dom' 导出的
- c# - .NET Core IHostedService 立即抛出“任务已取消”
- electron - 电子应用程序的Angular 8输入双向绑定不起作用
- css - Safari - CSS 变换:缩放()像素化动画