Apache Beam / PubSub задержка перед обработкой файлов - PullRequest
0 голосов
/ 21 декабря 2018

Мне нужно отложить обработку или публикацию имен файлов (файлов).Я ищу лучший вариант.

В настоящее время у меня есть два потока данных Apache Beam и промежуточный PubSub.Первый поток данных читает имена файлов из источника и помещает их в тему PubSub.Другой поток данных читает их и обрабатывает их.Однако мой вариант использования - начать обработку / чтение фактических файлов минимум через 1 час после их создания в источнике.

Поэтому у меня есть два варианта:

1) Задержка публикации сообщения по порядкуобрабатывать его сразу, но в удачный / ожидаемый момент

2) Задержка обработки извлеченных файлов

Как и выше, я ищу лучшее решение.Я не уверен, следует ли использовать механизм повтора гуавы в Apache Beam?Есть еще идеи?

1 Ответ

0 голосов
/ 27 декабря 2018

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

Затем вы можете определить конфигурацию окон, в которой триггер не срабатывает до истечения 1 часа задержки.Примерно так:

Window.<String>into(FixedWindows.of(Duration.standardMinutes(1))
      .triggering(AfterProcessingTime.pastFirstElementInPane()
                  .plusDelayOf(Duration.standardHours(1)))

Имейте в виду, что в итоге вы получите работу, которая просто сидит, ничего не делая, кроме как удерживать состояние в течение часа.Кроме того, вышеизложенное основано исключительно на времени обработки, поэтому оно будет ждать через час после запуска задания, даже если фактическое время создания файлов уже достаточно старое, чтобы оно могло сразу же выдать результаты.

Вы можете уточнить этодля триггера времени события, но вам, вероятно, потребуется написать собственный код для назначения временных меток вашим записям (именам файлов).Насколько мне известно, Beam в настоящее время не имеет встроенной поддержки для чтения времени создания файлов.Например, при чтении файлов через TextIO я заметил, что всем записям назначена статическая временная метка по умолчанию.Вы должны проверить специфику преобразования, которое вы используете для чтения имен файлов, чтобы выяснить, может ли оно сделать что-то более полезное для ваших целей.Вы также можете использовать преобразование WithTimestamps для самостоятельного назначения временных отметок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...