Перемещает ли Google Cloud Dataflow с ограниченной коллекцией водяной знак в пакетном режиме?

У меня есть конвейер, который считывает данные из базы данных в ограниченной коллекции. Каждому элементу коллекции присвоена метка времени ProcessContext.outputWithTimestamp. Данные читаются с помощью разделяемого DoFn, где ProcessContext.updateWatermark вызывается в конце ProcessElement. В общей сложности DoFn работает примерно со 100 разбиениями, так что это не одно целое.

Позже в конвейере определяется следующее фиксированное окно:

Window.<Map.Entry<Key, Long>>into(
    FixedWindows.of(Duration.standardSeconds(10)))
        .withAllowedLateness(Duration.ZERO)
        .triggering(AfterWatermark.pastEndOfWindow()
            .withEarlyFirings(AfterPane.elementCountAtLeast(10))))
        .discardingFiredPanes()

После окна коллекция объединяется по ключу: Sum.longsPerKey()

Проблема в том, что элементы коллекции никогда не проходят через комбайнер, пока коллекция не будет полностью прочитана. Это ожидаемое поведение потока данных в пакетном режиме? Я предполагаю, что Dataflow вообще не вычисляет / не перемещает водяной знак, это близко к истине?

Мой вопрос очень похож на Первые результаты преобразования GroupByKey, но в моем случае коллекция читается с помощью Splittable DoFn, где ProcessContext.updateWatermark вызывается в конце каждого элемента.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
314
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Да, это ожидаемое поведение конвейера пакетного режима, независимо от использования Splittable DoFn.

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

В конце концов, GroupByKey или, в вашем случае, Sum By Key, принудительно выполняет операцию перемешивания, которая требует, чтобы все данные были готовы перед фактическим выполнением преобразования SBK.

Я бы сказал, что вы правы, водяной знак не отслеживается для этого сценария.

Спасибо! Я также нашел разъяснение в beam.apache.org/documentation/runners/capability-matrix/…. Он говорит: «В пакетном режиме текущий прогресс водяного знака перескакивает с начала времени на конец времени после того, как ввод был полностью использован».

Maksim Kolchin 13.08.2018 11:21

В пакетном конвейере вы можете думать о водяном знаке для одновременного перехода от минимального к максимальному. Таким образом, все окна запускаются одновременно. Как упоминалось в ch_mike, в пакетном режиме каждый этап выполняется полностью до того, как будет запущен его последующий этап. Но их элементы должны проходить через комбайнер (при условии, что вы имеете в виду оптимизацию комбайнера в «картографе»).

Другие вопросы по теме