DirectRunner не читает из Pub / Sub, как я указал в FixedWindows в Beam Java SDK - PullRequest
0 голосов
/ 23 февраля 2019

В настоящее время я работаю над конвейером потоков данных, который читает потоковые данные из Pub / Sub с помощью Apache Beam Java SDK 2.8.0.Конвейер - это просто шаблон PubsubToText.java от Google.

https://github.com/GoogleCloudPlatform/DataflowTemplates/blob/master/src/main/java/com/google/cloud/teleport/templates/PubsubToText.java

Хотя развертывание в облаке с DataflowRunner работает, как и ожидалось, оно не работает правильно с DirectRunner, а именно, когда я работаюв локальной среде, что усложняет разработку конвейеров.

Когда я устанавливаю частоту FixedWindows равной 30 с, например, Dataflow Runner в облаке генерирует файлы каждые 30 секунд, что ожидается.

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

Например, он генерирует первые данные через 4 минуты и создает 8 файлов, которые, как предполагается, были созданы, фактически генерируются сразу, а затем через 5 минут, затемчерез 3 минуты ... и т. д., что делает процесс локальной разработки чрезвычайно трудоемким и разочаровывающим.

Почему я наблюдаю это?

Переключение Java SDK с 8 на 11,Beam SDK от 2.8.0 до 2.9.0 или 2.10.0, среда от локального до экземпляра GCE, ни конвейерный вывод из GCS в локальный не помогли.

Вот все, что нужно для воспроизведения проблемы:

  1. git clone https://github.com/GoogleCloudPlatform/DataflowTemplates
  2. удалите строку <scope>test</scope> для beam-runners-direct-java из pom.xml, чтобы она поддерживала DirectRunner во время выполнения.
  3. Выполните компиляциюи запустить программу, как предложено для https://github.com/GoogleCloudPlatform/DataflowTemplates/blob/master/src/main/java/com/google/cloud/teleport/templates/PubsubToText.java, но изменив бегун на DirectRunner и добавив --outputShardTemplate=W-P-SS-of-NN, что является опущенным параметром и требуется при локальном запуске.
  4. Удалить --project, --stagingLocation и tempLocation лодновременно, так как он не будет развернут в облаке.
  5. Создание файлов занимает очень много времени, хотя я установил, например, windowDuration=30s

Я подозревал этобыла проблема, связанная с Pub / Sub, но когда я запускаю tcpdump, он начинает подключаться к Pub / Sub и немедленно извлекает данные.Вероятно, это специфическая проблема DirectRunner.

1 Ответ

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

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

Добавление .trrigering в Window.into, проблемауходит.

...