Исполнители в Airflow (Executors)
Executor (исполнитель) — параметр конфигурации компонента планировщика Airflow. Выбранный исполнитель определяет, где и как выполняется задача. Можно выбрать один из предустановленных исполнителей под разные сценарии или определить свой кастомный executor.
В этом руководстве — какие исполнители доступны в Airflow 3 и как выбрать подходящий.
Необходимая база
Полезно понимать:
- Компоненты Airflow. См. Компоненты Airflow.
- Основные концепции Airflow. См. Introduction to Apache Airflow.
Как выбрать исполнителя
Для продакшен-деплойментов Airflow рекомендуются три основных исполнителя:
AstroExecutor
AstroExecutor — проприетарный исполнитель, доступный только пользователям Astro в Airflow 3 Deployments. Использует агентов, управляемых компонентом API server; поддерживает как hosted, так и remote execution в Deployments.
KubernetesExecutor
KubernetesExecutor — контейнерный исполнитель: каждый экземпляр задачи выполняется в отдельном Pod в Kubernetes. На Astro доступен для Deployments в режиме hosted execution в Airflow 2 и Airflow 3.
CeleryExecutor
CeleryExecutor — исполнитель с очередью: задачи отправляются в брокер Celery и забираются Celery workers. На Astro доступен для Deployments в режиме hosted execution в Airflow 2 и Airflow 3.
AstroExecutor
AstroExecutor — исполнитель по умолчанию для всех Airflow 3.x Deployments. Использует агентов (воркеров), которые получают задания от компонента API server и выполняют их в подпроцессах. API server управляет жизненным циклом агентов и логикой назначения задач; это надёжнее, чем CeleryExecutor, и задачи стартуют быстрее, чем с KubernetesExecutor.
Этот исполнитель можно использовать для Deployments на Astro как в hosted, так и в remote режиме выполнения. Он единственный обеспечивает remote execution на Astro; в других окружениях Airflow для удалённого выполнения можно использовать EdgeExecutor.
Выбирайте AstroExecutor для:
- всех Deployments в режиме remote execution на Astro;
- всех Airflow 3 Deployments на Astro, если нет особых причин использовать другой исполнитель.
С AstroExecutor можно использовать worker queues, чтобы запускать задачи на воркерах разных типов с разной конфигурацией ресурсов.
KubernetesExecutor
KubernetesExecutor — контейнерный исполнитель: каждый экземпляр задачи выполняется в своём Kubernetes Pod. Для его использования нужен доступ к кластеру Kubernetes. KubernetesExecutor даёт полную изоляцию задач и точный контроль над ресурсами на задачу; минус — более долгий старт задачи.
Выбирайте KubernetesExecutor для:
- деплойментов, где многим задачам нужна особая конфигурация ресурсов;
- деплойментов с высокими требованиями к изоляции задач.
Дополнительные требования к KubernetesExecutor выполняются автоматически в Astro Deployments, настроенных на этот исполнитель:
- Метаданная БД Airflow не может быть SQLite.
- Должен быть установлен Airflow Kubernetes provider.
Поды Kubernetes можно настраивать: базовая конфигурация и переопределение на уровне задачи через параметр pod_override. Подробнее: Configure tasks to run with the KubernetesExecutor для Astro и Kubernetes Executor - Configuration для self-hosted Airflow.
CeleryExecutor
CeleryExecutor позволяет масштабировать нагрузку по горизонтали: задачи выполняются на нескольких Celery workers, забирающих задачи из очереди. Задачи стартуют быстро, так как после первоначальной настройки дополнительная инфраструктура не нужна; можно масштабироваться по горизонтали и выполнять много задач параллельно. Поэтому CeleryExecutor часто выбирают по умолчанию для Airflow 2 Deployments на Astro и для self-managed Airflow 2 и 3.
Выбирайте CeleryExecutor для:
- деплойментов с высокой потребностью в горизонтальном масштабировании и параллельном выполнении многих задач;
- деплойментов со стабильной нагрузкой и частым запуском задач;
- всех Airflow 2 Deployments на Astro, если нет особых причин использовать KubernetesExecutor.
Для CeleryExecutor нужны дополнительные компоненты; в Astro Deployments с этим исполнителем они настраиваются автоматически:
- Установленный и настроенный бэкенд Celery: Redis, RabbitMQ или Redis Sentinel. В Astro Deployments используется Redis.
- Должен быть установлен Airflow Celery provider.
На Astro с CeleryExecutor можно использовать worker queues для запуска задач на воркерах разных типов с разной конфигурацией ресурсов.
Подробнее о настройке CeleryExecutor: Configure the CeleryExecutor для Astro и Celery Executor для self-managed Airflow.
LocalExecutor
LocalExecutor выполняется в процессе планировщика и в Airflow 3 является самым простым вариантом выполнения задач (SequentialExecutor и DebugExecutor в Airflow 3 удалены). Так как LocalExecutor работает в том же процессе, что и планировщик, дополнительная инфраструктура не нужна; при большом числе задач это может влиять на производительность планировщика.
Выбирайте LocalExecutor для:
- лёгких продакшен-окружений при self-managed Airflow;
- локальной разработки и тестов. Astro CLI использует LocalExecutor.
Переменная конфигурации [core].parallelism задаёт максимальное число задач, которые могут выполняться параллельно с LocalExecutor на один планировщик. Значение должно быть не меньше 1 (по умолчанию: 32).
Прочие исполнители
В self-managed Airflow доступны и другие исполнители:
- AWS Lambda Executor (experimental): AwsLambdaExecutor отправляет задачи в AWS Lambda для асинхронного выполнения. Входит в пакет Amazon provider.
- AWS Batch Executor: AwsBatchExecutor выполняет задачи в отдельных контейнерах, планируемых AWS Batch. Входит в пакет Amazon provider.
- AWS ECS Executor: AwsEcsExecutor — контейнерный исполнитель, каждый экземпляр задачи выполняется в отдельной ECS task. Входит в пакет Amazon provider.
- EdgeExecutor: позволяет распределять задачи по воркерам в удалённых локациях через HTTP(s). Входит в пакет Edge3 provider для Airflow 2.10 и выше.
Гибридные исполнители CeleryKubernetesExecutor и LocalKubernetesExecutor в Airflow 3 удалены. В self-managed окружении вместо них можно настроить несколько исполнителей, см. Configure an executor in self-hosted Airflow.
Настройка исполнителя на Astro {#configure-an-executor-on-astro}
На Astro исполнитель задаётся при создании Deployment. По умолчанию используется AstroExecutor.
При создании Deployment в Astro UI можно дополнительно настроить AstroExecutor (например, worker queues) или выбрать другой исполнитель:
- Нажмите кнопку Switch to custom configuration.
- Выберите нужный исполнитель.
На Astro Deployment можно создавать и программно, задавая исполнителя параметром конфигурации:
- Astro Terraform Provider: параметр
executorв ресурсеastro_deployment. Варианты:ASTRO,CELERY,KUBERNETES. - Astro API: параметр
executorв POST-запросе. Варианты:ASTRO,CELERY,KUBERNETES. - Astro CLI: флаг
--executor. Варианты:AstroExecutor,CeleryExecutor,KubernetesExecutor.


Настройка исполнителя в self-hosted Airflow {#configure-an-executor-in-self-hosted-airflow}
В open-source Airflow можно настроить несколько исполнителей и назначать каждой задаче исполнителя через параметр executor.
В конфигурационном файле Airflow задайте переменную [core].executor списком нужных исполнителей через запятую:
[core]
executor = KubernetesExecutor,CeleryExecutor,MyExecutor:my.custom.module.ExecutorClass
Два экземпляра одного и того же исполнителя в одном окружении Airflow использовать нельзя.
В коде задачи исполнитель задаётся параметром executor. Первый исполнитель в списке — исполнитель по умолчанию для всех задач, у которых он не указан.
# from airflow.sdk import task
@task(executor="CeleryExecutor")
def my_task():
pass
# from airflow.providers.standard.operators.bash import BashOperator
BashOperator(
task_id="my_task",
executor="MyExecutor",
bash_command="echo 'Hello World!'",
)