Зачем нужны сенсоры в Airflow
Что проверяют
Понимаете ли вы, как DAG ждёт внешнее событие и сколько это ожидание стоит ресурсов. Следом почти всегда спрашивают про режимы poke и reschedule, про deferrable-операторы и про то, чем сенсор можно заменить.
Как отвечать
Сенсор это оператор, наследник BaseSensorOperator, который повторяет проверку условия, пока оно не станет истинным. Условие описывается в методе poke(), возвращающем True или False. Типичные задачи: дождаться файла от партнёра, партиции в хранилище, завершения задачи в соседнем DAG, ответа API.
Примеры: FileSensor, S3KeySensor из провайдера Amazon, ExternalTaskSensor, SqlSensor, HttpSensor, DateTimeSensor. Для своего условия есть декоратор @task.sensor.
Ключевые параметры:
poke_interval: пауза между проверками, по умолчанию 60 секунд;timeout: общее время ожидания, по умолчанию семь дней. По истечении задача падает сAirflowSensorTimeout, и повторные попытки на это не тратятся;mode: вpokeсенсор держит слот воркера всё время ожидания, вrescheduleосвобождает его между проверками и уходит в статусup_for_reschedule;soft_failиexponential_backoff: пропуск задачи вместо падения и растущий интервал между проверками.
Для долгих ожиданий современный вариант это deferrable-режим: у многих сенсоров есть deferrable=True, задача передаёт ожидание процессу triggerer и не занимает воркер вообще. Старые smart sensors удалены, их заменили именно этим механизмом.
Хорошо упомянуть альтернативу: вместо ExternalTaskSensor можно запускать зависимый DAG по обновлению данных. В Airflow 3 это assets, во второй версии datasets.
Где спотыкаются
Ставят десятки сенсоров в режиме poke с ожиданием на часы. Они занимают все слоты пула, и задачи, которые должны создать ожидаемые данные, не могут запуститься.
Оставляют timeout по умолчанию. Сломанная выгрузка у партнёра превращается в неделю висящих запусков вместо быстрого алерта.
Связывают ExternalTaskSensor два DAG с разным расписанием и не задают смещение через execution_delta. Сенсор ждёт запуск с тем же logical date, которого не существует, и висит до таймаута.