Открыть сервис

Apache Airflow

Apache Airflow — это платформа с открытым исходным кодом для программного создания, планирования и мониторинга рабочих процессов (workflows). Разработанная на языке Python, Airflow позволяет определять сложные конвейеры обработки данных в виде направленных ациклических графов (DAG, Directed Acyclic Graph), где каждый узел представляет собой задачу, а рёбра — зависимости между ними. Платформа широко применяется в инженерии данных, машинном обучении, бизнес-аналитике и других областях, требующих автоматизации последовательных и параллельных вычислительных процессов.

История

Проект Apache Airflow был создан в 2014 году инженерами компании Airbnb (сервис краткосрочной аренды жилья) для решения внутренних задач по управлению сложными ETL-процессами (Extract, Transform, Load — извлечение, преобразование, загрузка данных). Разработчики Максим Бочаров, Алексей Вершинин и другие стремились создать инструмент, который бы сочетал гибкость программного определения задач с возможностью мониторинга и повторного запуска.

В 2015 году Airbnb открыла исходный код Airflow под лицензией Apache 2.0. Проект быстро привлёк внимание сообщества, и в 2016 году стал инкубационным проектом Apache Software Foundation. В январе 2019 года Airflow получил статус проекта верхнего уровня (Top-Level Project) Apache, что подтвердило его зрелость и широкое распространение. С тех пор платформа активно развивается, выпуская стабильные релизы (например, версии 2.0 в 2020 году, 2.5 в 2022 году, 2.8 в 2023 году) с новыми функциями, такими как улучшенная поддержка динамических DAG, улучшенный веб-интерфейс и интеграция с современными облачными сервисами.

Архитектура и компоненты

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

Веб-сервер (Web Server)

Веб-сервер предоставляет графический интерфейс пользователя (GUI), который позволяет визуализировать DAG, отслеживать статус выполнения задач, просматривать логи, запускать и останавливать рабочие процессы, а также управлять конфигурациями. Интерфейс построен на фреймворке Flask и использует JavaScript для динамического обновления данных.

Планировщик (Scheduler)

Планировщик — это основной компонент, отвечающий за определение, когда и как запускать задачи. Он постоянно сканирует папку с DAG-файлами, проверяет их зависимости и временные триггеры, после чего отправляет задачи на выполнение исполнителям. Планировщик работает в фоновом режиме и является единственным процессом, который может создавать новые экземпляры задач.

Исполнитель (Executor)

Исполнитель определяет, как именно будут выполняться задачи. Airflow поддерживает несколько типов исполнителей:

  • SequentialExecutor — выполняет задачи последовательно, в одном процессе. Используется для тестирования и разработки.
  • LocalExecutor — выполняет задачи параллельно, используя многопроцессорность на одной машине.
  • CeleryExecutor — распределяет задачи между несколькими рабочими узлами (workers) через брокер сообщений (например, RabbitMQ или Redis). Это наиболее распространённый вариант для production-сред.
  • KubernetesExecutor — запускает каждую задачу в отдельном поде (Pod) Kubernetes, что обеспечивает изоляцию и масштабирование.
  • CeleryKubernetesExecutor — гибридный вариант, позволяющий комбинировать Celery и Kubernetes.

Хранилище метаданных (Metadata Database)

Airflow использует реляционную базу данных (по умолчанию SQLite, в production — PostgreSQL, MySQL) для хранения метаданных: описание DAG, статусы задач, история выполнения, переменные, подключения и пользователи. Планировщик и веб-сервер постоянно обращаются к этой базе.

Папка DAG (DAG Folder)

Это каталог на файловой системе, в котором хранятся Python-скрипты, определяющие DAG. Планировщик периодически сканирует эту папку на предмет изменений. Каждый файл должен содержать объект DAG и соответствующую логику задач.

Основные понятия

DAG (Directed Acyclic Graph)

DAG — это математическая модель, представляющая рабочий процесс. В Airflow DAG — это Python-объект, который содержит набор задач и их зависимости. Ключевое свойство DAG — ацикличность, то есть отсутствие циклов, что гарантирует конечность выполнения. Каждый DAG имеет уникальный идентификатор (dag_id), а также параметры, такие как время начала (start_date), расписание (schedule_interval) и описание.

Задача (Task)

Задача — это единица работы в DAG. Каждая задача представляет собой вызов оператора (Operator) или сенсора (Sensor). Задачи могут быть связаны между собой с помощью операторов >> (последовательность) или << (обратная последовательность), а также с помощью методов set_upstream() и set_downstream().

Оператор (Operator)

Оператор — это предопределённый класс, который выполняет конкретное действие. Airflow включает множество встроенных операторов:

  • PythonOperator — выполняет произвольную Python-функцию.
  • BashOperator — выполняет команду в оболочке Bash.
  • PostgresOperator — выполняет SQL-запрос к PostgreSQL.
  • S3FileTransformOperator — преобразует файлы в Amazon S3.
  • EmailOperator — отправляет электронное письмо.

Пользователи могут создавать собственные операторы, наследуя от базового класса BaseOperator.

Сенсор (Sensor)

Сенсор — это особый тип оператора, который ожидает наступления определённого условия (например, появления файла в папке, завершения внешнего процесса, достижения определённого времени). Сенсоры могут быть настроены на опрос (polling) или на использование внешних триггеров.

Связь (Dependency)

Связи определяют порядок выполнения задач. Например, если задача A должна быть выполнена до задачи B, то между ними устанавливается связь A >> B. Airflow поддерживает сложные схемы зависимостей, включая параллельные ветки и условное выполнение.

Применение

Apache Airflow используется в различных сценариях, где требуется автоматизация и оркестрация сложных процессов.

Инженерия данных

Наиболее распространённое применение — построение ETL-конвейеров. Airflow позволяет извлекать данные из источников (базы данных, API, файлы), трансформировать их (очистка, агрегация, обогащение) и загружать в хранилища (например, Amazon Redshift, Google BigQuery, Snowflake). Пример: ежедневная загрузка данных о продажах из CRM в аналитическую базу данных.

Машинное обучение (MLOps)

Airflow используется для автоматизации пайплайнов машинного обучения: подготовка данных, обучение моделей, валидация, развёртывание и мониторинг. Например, DAG может запускать обучение модели каждую неделю, проверять её качество на тестовых данных и, если метрики улучшились, разворачивать новую версию в production.

Бизнес-аналитика и отчётность

Платформа позволяет создавать регулярные отчёты, отправлять их по электронной почте или загружать в BI-системы. Например, DAG может ежемесячно генерировать отчёт по финансовым показателям и отправлять его руководству.

Обработка потоковых данных

Хотя Airflow ориентирован на пакетную обработку, его можно использовать для оркестрации потоковых задач, запуская микропакеты (micro-batches) через короткие интервалы времени.

Преимущества и недостатки

Преимущества

  • Гибкость: DAG определяются на Python, что позволяет использовать любые библиотеки и логику.
  • Масштабируемость: поддержка распределённых исполнителей (Celery, Kubernetes) позволяет обрабатывать большие объёмы задач.
  • Визуализация: веб-интерфейс предоставляет наглядное представление DAG, статусов и логов.
  • Сообщество и экосистема: большое количество встроенных операторов, интеграций с облачными сервисами (AWS, GCP, Azure) и активное сообщество.
  • Открытый исходный код: бесплатное использование, возможность модификации.

Недостатки

  • Сложность настройки: для production-развёртывания требуется настройка базы данных, брокера сообщений, исполнителей и мониторинга.
  • Не подходит для потоковой обработки в реальном времени: Airflow не предназначен для обработки событий с низкой задержкой (например, стриминг данных).
  • Зависимость от Python: команды, не владеющие Python, могут испытывать трудности.
  • Управление версиями DAG: при большом количестве DAG может возникнуть сложность в управлении их версиями и зависимостями.

Альтернативы

На рынке существуют другие инструменты для оркестрации рабочих процессов:

  • Apache NiFi — ориентирован на потоковую передачу данных с низкой задержкой.
  • Prefect — более современный аналог Airflow с улучшенным управлением состоянием и динамическими DAG.
  • Luigi — легковесный инструмент от Spotify, также написанный на Python.
  • Dagster — платформа, фокусирующаяся на тестировании и воспроизводимости конвейеров.
  • Cloud-сервисы: AWS Step Functions, Google Cloud Composer (управляемый Airflow), Azure Data Factory.

Интересные факты

  • Название «Airflow» происходит от идеи «воздушного потока» (airflow), символизирующего непрерывное движение данных.
  • Версия 2.0, выпущенная в 2020 году, принесла значительные изменения, включая полную переработку веб-интерфейса, улучшенную поддержку динамических DAG и новый API.
  • Airflow используется в таких крупных компаниях, как Airbnb, Twitter, Spotify, Lyft, и многих других.
  • В 2021 году проект вошёл в число самых популярных проектов Apache по количеству участников.

Источники

  • Официальная документация Apache Airflow (https://airflow.apache.org/docs/)
  • «Apache Airflow: The Definitive Guide» by J. B. H. K. (O'Reilly Media, 2021)
  • Статья «Airflow: A Workflow Management Platform» на сайте Apache Software Foundation
  • «Airflow: A Data Engineering Tool» — блог компании Airbnb Engineering (2015)
  • Репозиторий проекта на GitHub (https://github.com/apache/airflow)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →