I\'m trying to use kafka streams to perform a windowed aggregation and emit the result only after a certain session window is closed. To achieve this I\'m using the suppress
There two option to solve that issue:
use TimeWindowedKStream::aggregate(final Initializer
use KStream::groupByKey(final Grouped
In you case it will be:
Ad 1:
input
.groupByKey()
.windowedBy(SessionWindows.with(Duration.ofSeconds(30)))
.aggregate(() -> Long.valueOf(0), (key, v1, v2) -> v1 + v2, (key, agg1, agg2) -> agg1 + agg2, Materialized.with(Serdes.String(), Serdes.Long()))
.suppress(Suppressed.untilWindowCloses(Suppressed.BufferConfig.unbounded()))
.toStream()
.map((k, v) -> new KeyValue<>(k.key(), v))
.to("output");
Ad 2:
input
.groupByKey(Grouped.with(Serdes.String(), Serdes.Long())
.windowedBy(SessionWindows.with(Duration.ofSeconds(30)))
.aggregate(() -> Long.valueOf(0), (key, v1, v2) -> v1 + v2, (key, agg1, agg2) -> agg1 + agg2)
.suppress(Suppressed.untilWindowCloses(Suppressed.BufferConfig.unbounded()))
.toStream()
.map((k, v) -> new KeyValue<>(k.key(), v))
.to("output");