Ответ
Архитектура Apache Airflow состоит из нескольких взаимосвязанных компонентов, которые обеспечивают планирование, запуск и мониторинг рабочих процессов (DAGs).
Основные компоненты:
-
Web Server (Веб-сервер) Это пользовательский интерфейс (UI) на базе Flask. Он позволяет просматривать состояние DAG, запускать и отлаживать задачи, управлять подключениями и переменными.
-
Scheduler (Планировщик) Ключевой процесс, который отслеживает все DAG и задачи, определяет их зависимости и запускает выполнение по расписанию или триггеру. Он постоянно взаимодействует с базой данных метаданных.
-
Metadata Database (База данных метаданных) Хранилище (обычно PostgreSQL или MySQL), где Airflow хранит состояние всех DAG, задач, запусков, переменных, подключений и другую служебную информацию.
-
Executor (Исполнитель) Компонент, отвечающий за то, как и где будут выполняться задачи. Он получает задачи от планировщика и запускает их. Популярные исполнители:
LocalExecutor: Запускает задачи в параллельных процессах на той же машине, что и планировщик.CeleryExecutor: Распределяет задачи по нескольким рабочим машинам (workers) с помощью очереди сообщений (RabbitMQ, Redis).KubernetesExecutor: Создает отдельный pod в кластере Kubernetes для каждой выполняемой задачи.
-
Workers (Воркеры) Процессы или машины, которые непосредственно выполняют код задач. Они необходимы при использовании распределенных исполнителей, таких как
CeleryExecutor.
Пример простого DAG:
# dags/my_first_dag.py
from airflow.models.dag import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime
with DAG(
dag_id='simple_bash_dag',
start_date=datetime(2023, 1, 1),
schedule_interval='@daily',
catchup=False,
tags=['example'],
) as dag:
task_hello = BashOperator(
task_id='print_hello',
bash_command='echo "Hello, Airflow!"',
)
task_date = BashOperator(
task_id='print_date',
bash_command='date',
)
task_hello >> task_date # Определение зависимости: task_date выполнится после task_hello