Learning Platform
Глоссарий Troubleshooting
Урок 04.01 · 10 мин
Продвинутый
OperatorsSensorsBaseOperatorProviders

Operators и Sensors — обзор модуля

Operators — единица работы в Airflow. Каждый task в DAG основан на каком-либо operator: PythonOperator, BashOperator, SparkSubmitOperator, EmptyOperator. Sensors — специальный класс operators, которые ждут событие. Этот модуль препарирует BaseOperator до execute() метода и разбирает три режима sensor execution.

Уроки модуля

#УрокЧто внутри
01Обзор модуляТекущий урок
02BaseOperator anatomyInheritance hierarchy, execute() lifecycle, template_fields
03PythonOperator + TaskFlow_PythonDecoratedOperator, ExternalPythonOperator, KubernetesPodOperator
04Sensors — three modespoke (blocking) vs reschedule (free slot) vs deferred (async)
05Branching patternsBranchPythonOperator, ShortCircuit, trigger rules после branching
06Provider architectureEntry points, hooks, 3000+ provider packages

(TaskGroup vs SubDAG детально разобран в Module 02 lesson 07.)

Ключевые концепты

  • BaseOperator — корневой класс. execute(context) — main method. template_fields — какие args jinja-render-ят при rendering. on_failure_callback, on_success_callback — hooks для notifications.
  • Sensor modes:
    • poke — блокирует worker slot, exponential backoff между poke
    • reschedule — освобождает slot, через task_reschedule table планирует следующий poke
    • deferred — переходит в triggerer через asyncio loop, не блокирует ни slot, ни scheduler
  • Provider packages — community-maintained. apache-airflow-providers-amazon, -google, -snowflake, -postgres. Регистрируются через entry points в setup.py. 3000+ providers в registry.

Sensor mode сравнение

ModeBlocked worker slotTriggerer requiredLatencyСтоимость
poke✅ Да❌ НетМгновенная (per poke)Worker занят 24/7
reschedule❌ Нет❌ НетДо 1 minute (между reschedule)Минимальная
deferred❌ Нет✅ ДаМгновенная (async event)Triggerer process

Best practice: для long-wait sensors (часы/сутки) использовать deferrable=True. Для коротких (минуты) — poke. reschedule — middle ground.

Killer takeaway

В production одна типичная ошибка: 100 копий S3KeySensor в poke mode с 24h timeout занимают 100 worker slots. Переход на deferrable=True освобождает все эти slots, и 100 triggers нормально работают на одном triggerer (asyncio scale handles thousands).

Связи

  • Модуль 09 (Triggerer) — детально про deferrable operators internals
  • Модуль 11 (Pools/Concurrency) — как priority_weight влияет на ordering
  • Модуль 12 (Plugins) — как написать custom operator/sensor через provider

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 6