web-dev-qa-db-fra.com

Kafka Stream Suppress Session-windowed -gregation

J'ai écrit ce code dans une application de flux Kafka:

KGroupedStream<String, foo> groupedStream = stream.groupByKey();
groupedStream.windowedBy(
SessionWindows.with(Duration.ofSeconds(3)).grace(Duration.ofSeconds(3)))
    .aggregate(() -> {...})
    .suppress(Suppressed.untilWindowCloses(unbounded()))
    .toStream()...

qui devrait (si j'ai bien compris) émettre des enregistrements par clé après la fermeture de la fenêtre. D'une certaine manière, le comportement est le suivant:

Le flux n'émet pas le premier enregistrement et ne le transmet qu'après le deuxième enregistrement, même avec une clé différente, puis le deuxième enregistrement n'est émis qu'après le 3e et ainsi de suite.

J'ai essayé plusieurs StreamConfigs avec "exactement_once" et avec ou sans mise en cache également, ce comportement persiste.

Merci d'avance pour votre aide !

8
dborn

C'est un comportement attendu. Notez que suppress() est basé sur l'heure de l'événement. Ainsi, tant qu'aucune nouvelle donnée n'arrive, le temps ne peut pas avancer et donc expulser l'enregistrement plus tôt serait faux, car il n'y a aucune garantie, que l'enregistrement suivant pourrait appartenir à la fenêtre en cours.

8
Matthias J. Sax