私はこのコードを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を試しましたが、キャッシングの有無にかかわらず、この動作は持続します。
よろしくお願いします!
これは予想される動作です。 suppress()
はイベント時間に基づいていることに注意してください。したがって、次のレコードが現在のウィンドウに属しているという保証がないため、新しいデータが到着しない限り、時間を進めることができず、レコードを早期に追い出すことはできません。