Что такое оркестрация и Airflow

Урок объясняет, зачем нужна оркестрация и какое место в ней занимает Apache Airflow.

Оркестрация — управление порядком, расписанием и зависимостями множества задач конвейера. Apache Airflow — популярный оркестратор, где конвейеры описываются кодом на Python.

Зачем оркестратор

Конвейер редко состоит из одного шага. Типичная цепочка: забрать данные из API, проверить их, преобразовать, загрузить в хранилище, обновить дашборд. Если просто запускать пять скриптов по cron, возникают вопросы: что делать, если второй шаг упал? Как не запустить четвёртый, пока не готов третий? Как перезапустить вчерашний день? Оркестратор отвечает на всё это.

cron:     5 независимых задач, никто не знает о сбоях соседа
Airflow:  extract → validate → transform → load → notify
                    (если validate упал — дальше не пойдём, придёт алерт)

Почему именно Airflow

  • Конвейер — это код. DAG пишется на Python, лежит в git, проходит ревью.
  • Веб-интерфейс. Видно, какие задачи прошли, какие упали, и можно перезапустить.
  • Расписание и зависимости. Встроенный планировщик и язык зависимостей между задачами.
  • Экосистема. Готовые операторы для баз, облаков, API.

Airflow появился в Airbnb в 2014 году как ответ на ровно эту боль: десятки взаимозависимых скриптов, запускаемых по cron, которые невозможно было ни отследить, ни надёжно перезапустить. Идея «описывать конвейер кодом, а не кликами в интерфейсе» оказалась настолько удачной, что Airflow стал стандартом отрасли. Сегодня у него есть конкуренты (Dagster, Prefect, Mage), но принципы — DAG, задачи, расписание, зависимости — у всех общие, поэтому, освоив Airflow, вы поймёте и остальные.

Как работает под капотом

В Airflow несколько компонентов: Scheduler решает, что и когда запускать; Executor/Workers исполняют задачи; Metadata DB хранит состояние; Webserver показывает интерфейс. Сам конвейер описывается объектом DAG. Этот код не запускается в браузере (нужен пакет airflow), поэтому помечен как text.

from airflow import DAG
from airflow.operators.empty import EmptyOperator
from datetime import datetime

with DAG(
    dag_id="hello_airflow",
    start_date=datetime(2026, 1, 1),
    schedule="@daily",
    catchup=False,
) as dag:
    start = EmptyOperator(task_id="start")
    finish = EmptyOperator(task_id="finish")
    start >> finish

А логику отдельного шага можно отлаживать как обычную Python-функцию, без Airflow. Например, шаг «посчитать контрольную сумму батча»:

import hashlib

batch = ["order-1", "order-2", "order-3"]
digest = hashlib.md5("|".join(batch).encode()).hexdigest()
print("Записей:", len(batch))
print("Контрольная сумма:", digest[:8])

Вывод:

Записей: 3
Контрольная сумма: 5a9f3b2e

Частые ошибки

  • Писать всю логику ETL прямо в DAG-файле. DAG должен описывать порядок задач; тяжёлую логику выносят в отдельные функции и модули.
  • Путать определение DAG и его выполнение. Файл DAG лишь описывает граф; запускает задачи Scheduler по расписанию.
  • Считать Airflow местом для самих вычислений. Airflow дирижирует, а тяжёлые расчёты лучше отдавать в Spark или SQL хранилища.

Итог

  • Оркестратор управляет порядком, расписанием и зависимостями задач конвейера.
  • Airflow описывает конвейеры кодом на Python (DAG) и даёт веб-интерфейс.
  • Его компоненты: Scheduler, Workers, Metadata DB, Webserver.
Проверьте себя
1. Чем оркестратор вроде Airflow лучше пяти задач в cron?
AОн работает быстрее каждого скрипта по отдельности
BОн управляет зависимостями и не запустит следующий шаг, если предыдущий упал
CОн не требует писать код
DОн заменяет хранилище данных
2. Какой компонент Airflow решает, что и когда запускать?
AWebserver
BScheduler
CMetadata DB
DOperator