Apache Airflow и Apache Beam на поверхности выглядят очень похоже. Оба они позволяют вам организовать набор шагов, которые обрабатывают ваши данные, и оба обеспечивают выполнение шагов в правильном порядке и удовлетворение их зависимостей. Оба позволяют визуализировать шаги и зависимости в виде ориентированного ациклического графа (DAG) в графическом интерфейсе.
Но когда вы копаете глубже, вы обнаружите большие различия в том, что они делают, и в поддерживаемых ими моделях программирования.
Airflow - это система управления задачами. Узлы группы обеспечения доступности баз данных являются задачами, и Airflow обеспечивает их выполнение в правильном порядке, следя за тем, чтобы одна задача запускалась только после завершения ее зависимых задач. Зависимые задачи выполняются не одновременно, а только одна за другой. Независимые задачи могут выполняться одновременно.
Beam - это механизм обработки данных. Узлы группы обеспечения доступности баз данных формируют (возможно, ветвящийся) конвейер. Все узлы в группе обеспечения доступности баз данных активны одновременно, и они передают элементы данных от одного к другому, каждый из которых выполняет на нем некоторую обработку.
У обоих есть несколько перекрывающихся вариантов использования, но есть много вещей, которые может справиться только один из двух.
Воздушный поток управляет задачами, которые зависят друг от друга. Хотя эта зависимость может состоять из одной задачи, передающей данные следующей, это не является обязательным требованием. На самом деле Airflow даже не заботится о том, что делают задачи, ему просто нужно запустить их и посмотреть, закончились они или нет. Если задачам необходимо передавать данные друг другу, вам необходимо согласовать это самостоятельно, указав каждой задаче, где следует читать и записывать свои данные, например, локальный путь к файлу или веб-сервис где-то. Задачи могут состоять из кода Python, но они также могут быть любой внешней программой или вызовом веб-службы.
В Beam ваши определения шагов тесно связаны с двигателем. Вы определяете шаги на поддерживаемом языке программирования, и они выполняются внутри процесса Beam. Обработка вычислений во внешнем процессе будет затруднена, если это вообще возможно *, и, безусловно, это не тот способ, которым предполагается использовать Beam. Ваши шаги должны беспокоиться только о вычислениях, которые они выполняют, а не о сохранении или передаче данных. Передача данных между различными этапами полностью обрабатывается платформой.
В Airflow, если ваши задачи обрабатывают данные, один вызов задачи обычно выполняет некоторое преобразование во всем наборе данных. В Beam обработка данных является частью основных интерфейсов, поэтому она больше ничего не может сделать. Вызов шага Beam обычно обрабатывает один или несколько элементов данных, а не полный набор данных. Из-за этого Beam также поддерживает наборы данных неограниченной длины, с которыми Airflow не может справиться.
Другое отличие состоит в том, что Airflow сам по себе является фреймворком, но на самом деле Beam - это слой абстракции. Лучевые конвейеры могут работать на Apache Spark, Apache Flink, Google Cloud Dataflow и других. Все они поддерживают более или менее похожую модель программирования. Кстати, Google также превратил Airflow в сервис под названием Google Cloud Compose.
* Поддержка Apache для Python в действительности реализована путем запуска полного интерпретатора Python в подпроцессе, но это реализовано на уровне инфраструктуры.