Каковы преимущества Apache Beam над Spark/Flink для пакетной обработки?

Apache Beam поддерживает несколько backner-серверов, включая Apache Spark и Flink. Я знаком с Spark/Flink, и я пытаюсь увидеть плюсы/минусы Beam для пакетной обработки.

Глядя на Пример подсчета количества лучей, он чувствует, что он очень похож на родной эквивалент Spark/Flink, возможно, с немного более подробным синтаксис.

В настоящее время я не вижу большого преимущества выбора Beam over Spark/Flink для такой задачи. Единственные наблюдения, которые я могу сделать до сих пор:

  • Pro: абстракция над другими исполняемыми файлами.
  • Con: эта абстракция приходит к цене за меньший контроль над тем, что именно выполняется в Spark/Flink.

Есть ли лучшие примеры, которые выделяют другие плюсы и минусы модели Beam? Есть ли какая-либо информация о том, как потеря контроля влияет на производительность?

Обратите внимание, что я не прошу о различиях в аспектах потоковой передачи, которые частично рассматриваются в этом вопросе и обобщены в эта статья (устаревшая из-за Spark 1.X).

Ответы

Ответ 1

Есть несколько вещей, которые Beam добавляет по многим из существующих движков.

  • Унификация пакетной и потоковой передачи. Многие системы могут обрабатывать как пакетные, так и потоковые передачи, но часто делают это с помощью отдельных API. Но в Beam, пакетная и потоковая передача - всего две точки по спектру задержек, полноты и стоимости. Там нет обучения/переписывания скалы от партии до потоковой передачи. Поэтому, если вы напишете пакетный протокол сегодня, но завтра ваша латентность нуждается в изменении, его невероятно легко настроить. Вы можете увидеть это путешествие в Mobile Gaming examples.

  • API, которые повышают уровень абстракции: API-интерфейсы Beam фокусируются на захвате свойств ваших данных и вашей логики, вместо того, чтобы пропускать детали утечки времени выполнения. Это является ключом к переносимости (см. Следующий параграф), а также может обеспечить время автономной работы в отношении того, как они выполняются. Что-то вроде ParDo fusion (aka function composition) - довольно простая оптимизация, которую подавляющее большинство бегунов уже делает. Другие оптимизаторы все еще выполняются для некоторых участников. Например, Beam Source APIs специально сконструированы, чтобы избежать чрезмерной проверки осколков в конвейере. Вместо этого они дают бегунам правильные крючки для динамического перераспределения работы по доступным машинам. Это может существенно повлиять на производительность, по существу устраняя осколки отставших. В общем, чем больше умений мы можем построить в бегунах, тем лучше мы будем. Даже самая тщательная ручная настройка не сработает при изменении данных, кода и сред.

  • Переносимость во время выполнения.. Поскольку форматы данных и требования к времени выполнения аккуратно разделены, один и тот же конвейер можно запускать несколькими способами. И это означает, что вы не переписываете код, когда вам нужно переходить с on-prem на облако или из проверенной и правильной системы на что-то на передний край. Вы можете легко сравнить варианты, чтобы найти сочетание среды и производительности, которая наилучшим образом подходит для ваших текущих потребностей. И это может быть сочетание вещей - обработка конфиденциальных данных по помещению с помощью бегуна с открытым исходным кодом и обработка других данных на управляемой службе в облаке.

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

  • Keyed State - отличный пример функциональности, которая существовала в разных машинах и включала интересные и распространенные случаи использования, но не была изначально выражена в Луч. Недавно мы расширили модель Beam, включив версию этой функции в соответствии с принципами Beam .
  • И наоборот, мы надеемся, что Beam повлияет и на дорожные карты различных двигателей. Например, семантика Flink DataStreams была повлияла на модель Beam (née Dataflow).
  • Это также означает, что возможности не всегда будут одинаковыми для разных Beam-бегунов в данный момент времени. Итак, почему мы используем матрицу возможностей, чтобы попытаться четко передать состояние вещей.