我已经在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发出记录。 不知何故,行为如下:
该流不会发出第一条记录,仅使用不同的Key才将其转发到第二条记录之后,然后仅在第三条记录之后发出第二条记录,依此类推。
我尝试了多个带有“ exactly_once”的StreamConfigs,并且无论是否具有缓存,这种现象仍然存在。
预先感谢您的帮助!
答案 0 :(得分:4)
这是预期的行为。请注意,suppress()
是基于事件时间的。因此,只要没有新数据到达,时间就无法提前,因此更早地收回记录是错误的,因为不能保证下一条记录可能属于当前窗口。
答案 1 :(得分:0)
我认为带有“ suppress()”的“会话窗口”不会产生任何输出。
如果有错,请纠正我。据我所知,hibit()仅适用于基于时间的Windows,不适用于基于会话的Windows。