Как работает подавление с помощью emitEarlywhenFull () для падающих окон? - PullRequest
0 голосов
/ 15 апреля 2019

Я использую подавление в падающих окнах для получения агрегированных результатов. Я изучаю оба параметра, пока и TimeLimit, и до тех пор пока WindowCloses для подавления. Я не хочу, чтобы мои потоки отключались при заполнении буфера. Я видел эту функцию emitEarlyWhenFull (), но она не может быть применена поверх, пока WindowCloses. Следовательно, я выбираю, пока TimeLImit с emitEarlyWhenFull (), пожалуйста, обратитесь ниже код:

groupedStreams.windowedBy(TimeWindows.of(Duration.ofMinutes(5)))    
.aggregate(() -> initialBlob, blobAggregator,someserde)
.suppress(Suppressed.untilTimeLimit(Duration.ofMinutes(5), new StrictBufferConfigImpl().emitEarlyWhenFull()))
.toStream()

В моем случае я использую падающие окна в течение 5 минут. Таким образом, каждые 5 минут окно будет открыто для каждого ключа записи. Согласно документации, самые старые записи будут отправлены после заполнения буфера. что происходит с новыми записями с тем же ключом, когда старые записи отправляются в одно и то же окно?

Например: поток сообщений: (А, 1) (А, 2) (A, 3) -> общий результат: (A, 6). предположим, что здесь буфер заполнен, (A, 6) будет отправлено в нисходящем направлении. Предположим, что (A, 4) теперь появляется в том же окне, что будет дальше? это будет: (A, 10) или снова начнется с (A, 4)?

1 Ответ

0 голосов
/ 16 апреля 2019

Если выбрано значение suppress(), состояние будет сохранено. Таким образом, для вашего примера агрегация будет продолжена и в конечном итоге (A, 10) будет отправлено.

...