Как потоки кафки вычисляют водяные знаки? - PullRequest
0 голосов
/ 08 февраля 2019

Кафка Streams внутренне вычисляет водяные знаки?Можно ли наблюдать результат окна (только), когда оно завершается (т. Е. Когда водяной знак проходит через конец окна)?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Внутренне ли Kafka Streams вычисляет водяные знаки?

Нет.Kafka Streams следует модели обработки непрерывного обновления , которая не требует водяных знаков.Вы можете найти более подробную информацию об этом онлайн:

Возможно ли наблюдать результатокно (только), когда оно завершается (т.е. когда водяной знак проходит через конец окна)?

Вы можете наблюдать за результатом окна в любой момент времени.Либо через подписку на поток изменений в результате, например, с помощью KTable#toStream()#foreach() (т. Е. Подход на основе push), либо с помощью Interactive Queries , которые позволяют активно запрашивать окно результатов (т. Е. Подход на основе pull).

Как уже упоминалось @Dmitry, для подхода на основе push вы также можете использовать оператор suppress(), если вас интересует только конечный результат окна.

0 голосов
/ 08 февраля 2019

Kafka Streams не использует водяные знаки внутри, но новая функция в 2.1.0 позволяет наблюдать результат работы окна, когда оно закрывается.Он называется Suppressed, и вы можете прочитать об этом в документации: Окно Окончательные результаты :

KGroupedStream<UserId, Event> grouped = ...;
grouped
    .windowedBy(TimeWindows.of(Duration.ofHours(1)).grace(ofMinutes(10)))
    .count()
    .suppress(Suppressed.untilWindowCloses(unbounded()))
...