首页 > 解决方案 > 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,并且无论有没有缓存,这种行为仍然存在。

在此先感谢您的帮助 !

标签: apache-kafkaapache-kafka-streamswindow-functionssuppress

解决方案


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


推荐阅读