Kafka Stream подавляет агрегацию оконных сессий - PullRequest
0 голосов
/ 16 января 2019

Я написал этот код в потоковом приложении Kafka:

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

, который должен (если я правильно понял) генерировать записи на ключ после закрытия окна.Каким-то образом поведение выглядит следующим образом:

Поток не отправляет первую запись и только пересылает ее после второй записи даже с другим ключом, а затем вторая запись отправляется только после 3-й и т. Д..

Я перепробовал несколько StreamConfigs с "точной_конечностью" и с кэшированием или без него, это поведение сохраняется.

Заранее спасибо за вашу помощь!

1 Ответ

0 голосов
/ 17 января 2019

Это ожидаемое поведение. Обратите внимание, что suppress() основано на времени события. Таким образом, до тех пор, пока новые данные не поступают, время не может продвигаться вперед, и, таким образом, удаление записи ранее будет неправильным, поскольку нет гарантии того, что следующая запись может принадлежать текущему окну.

...