Kafka Stream 抑制会话窗口聚合

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()...

在 window 关闭后,应该(如果我理解正确的话)为每个键发出记录。 不知何故,行为如下:

流不发出第一条记录,仅在第二条记录之后转发它,即使使用不同的 Key,然后第二条记录仅在第三条记录之后发出,依此类推..

我已经尝试使用 "exactly_once" 的多个 StreamConfigs,无论是否使用缓存,这种行为仍然存在。

在此先感谢您的帮助!

这是预期的行为。请注意,suppress() 基于事件时间。因此,只要没有新数据到达,时间就无法推进,因此提前驱逐记录是错误的,因为无法保证下一条记录可能属于当前 window.

我认为 "Session Window" 和 "suppress()" 不会产生任何输出。

有错请指正。据我所知,suppress() 仅适用于基于时间的 Windows 并且不适用于基于会话的 Windows.