web-dev-qa-db-ja.com

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

ウィンドウが閉じられた後、(私が正しく理解していれば)キーごとにレコードを出力するはずです。どういうわけか動作は次のとおりです:

ストリームは最初のレコードを発行せず、別のキーを使用しても2番目のレコードの後に​​のみ転送し、2番目のレコードは3番目以降に発行されます。

「exactly_once」を使用して複数のStreamConfigを試しましたが、キャッシングの有無にかかわらず、この動作は持続します。

よろしくお願いします!

8
dborn

これは予想される動作です。 suppress()はイベント時間に基づいていることに注意してください。したがって、次のレコードが現在のウィンドウに属しているという保証がないため、新しいデータが到着しない限り、時間を進めることができず、レコードを早期に追い出すことはできません。

8
Matthias J. Sax