我在kafka流应用程序中编写了以下代码:
KGroupedStream<String, foo> groupedStream = stream.groupByKey();
groupedStream.windowedBy(
SessionWindows.with(Duration.ofSeconds(3)).grace(Duration.ofSeconds(3)))
.aggregate(() -> {...})
.suppress(Suppressed.untilWindowCloses(unbounded()))
.toStream()...
它应该(如果我理解正确的话)在窗口关闭后为每个键发出记录。不知何故,行为如下:
流不发出第一条记录,只在第二条记录之后转发它,即使使用不同的键,然后第二条记录只在第三条记录之后发出,以此类推。。
我尝试过多个streamconfigs,使用“exactly\u once”,并且无论是否使用缓存,这种行为仍然存在。
提前感谢您的帮助!
2条答案
按热度按时间jgwigjjp1#
我不认为带有suppress()的sessionwindow会产生任何输出。
有错就纠正我。据我所知,suppress()只适用于基于时间的窗口,而不适用于基于会话的窗口。
xe55xuns2#
这是预期的行为。请注意
suppress()
基于事件时间。因此,只要没有新的数据到达,时间就无法前进,因此较早地逐出记录是错误的,因为无法保证下一个记录可能属于当前窗口。