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

Plugins и Listeners — обзор модуля

Plugins позволяют расширять Airflow без форкания: добавлять hooks, operators, sensors, macros, custom UI views. В Airflow 2.8+ появился отдельный Listener API — новый «правильный» способ слушать события lifecycle (task started, dataset emitted).

Уроки модуля

#УрокЧто внутри
01Обзор модуляТекущий урок
02Plugin managerAirflowPlugin class, entry_points регистрация
03Custom hooksBaseHook subclass, connection lookup, full hook example
04Listener API (2.8+)pluggy-based hooks, task/dagrun/dataset events, OpenLineage use case
05Macros и JinjaBuilt-in macros, user_defined_macros, template_searchpath
06UI plugins (Flask blueprints)AppBuilder views, Flask templates (в 3.x — React plugins)

Plugin registration

Два способа:

  1. Через airflow/plugins/ — file-based, legacy
  2. Через entry_points (рекомендуется) — provider package в setup.py:
entry_points={
    'apache_airflow_provider': ['provider_info=my_provider:get_provider_info']
}

Listener API — новый «правильный» способ

from airflow.listeners import hookimpl

class MyListener:
    @hookimpl
    def on_task_instance_running(self, previous_state, task_instance, session):
        # Real-time hook
        send_to_slack(f"Task {task_instance.task_id} started")

Доступные hooks:

  • on_dag_run_running / _success / _failed
  • on_task_instance_running / _success / _failed
  • on_starting / before_stopping — scheduler lifecycle
  • on_dataset_created / on_dataset_changed — datasets/assets events

Killer takeaway

В 2.x для custom logic на task events использовали on_failure_callback per task, что не масштабировалось. С Listener API один listener видит все events системы — это идеальное место для:

  • Generic alerting (Slack, PagerDuty)
  • Audit logging
  • Custom metrics
  • Lineage emission (OpenLineage provider использует именно Listener API)

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

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

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

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