Является ли apache -beam хорошим выбором, когда порядок записи событий должен сохраняться при записи в сток? - PullRequest
0 голосов
/ 10 марта 2020

Я рассматриваю возможность использования apache beam для записи потокового конвейера, чтобы применить поток мутаций для репликации событий из исходной базы данных в базу данных назначения в порядке времени события. Источником может быть kafka или pubsub.

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

Я сделал go над некоторыми из предыдущих вопросов, заданных при сохранении заказа:

Я понимаю, что если я go вниз по apache трассе луча мне нужно было бы

  1. выбрать стратегию управления окнами с размещением для поздних данных (либо фиксированная стратегия управления окнами с допустимым запаздыванием, либо с глобальным окном, иметь триггеры для создания панелей и буфер для поздних данных)
  2. применить преобразования
  3. GroupByKey по одному ключу (так, чтобы что-нибудь пошло одному и тому же работнику), отсортировать и записать в приемник

В дополнение к вышесказанному, я должен убедиться, что windows (если я следую стратегии фиксированного окна) выполняются по порядку. Шаг 3 является узким местом.

Если [2] выше в списке шагов является большим количеством вычислений, тогда apache beam будет иметь смысл использовать преимущества параллелизма, которые предлагает луч. Но если [2] является простым отображением один-к-одному, имеет ли смысл apache beam для этого сценария использования репликации. Пожалуйста, дайте мне знать, если я что-то упустил.

Примечание. У нас есть пакетный конвейер для потока данных, использующий луч apache для загрузки дампа данных из gcs в базу данных, где все данные находятся на диске, и порядок в котором его написано в раковину не имеет значения.

1 Ответ

1 голос
/ 21 марта 2020

Сохранение порядка возможно, но не уверен, прост он или эффективен.

Это также зависит от того, сколько данных (elements / se c) вы ожидаете, а также от типа приемника. , Потенциально можно было бы сделать так, чтобы конвейер записывал упорядоченные записи в GCS, а приемник просто считывал файлы по порядку как вторичный процесс.

Другой вариант - использовать параллельные записи и убедиться, что база данных может использоваться только до времени выхода водяного знака последней ступени луча, возможно, это возможно, но на самом деле это не основной сценарий использования Dataflow / Apache Beam.

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

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

Но, опять же, имейте в виду, что все эти подходы определенно не являются основным вариантом использования Dataflow / Apache Beam.

...