编排工具
Airflow、dbt、Prefect、Luigi。
35 分钟
编排工具
单脚本 + cron 难以管理依赖、重试与可观测性。编排器把 Extract、Transform、Load 变成有向无环图(DAG),并记录每次运行状态。
学习目标
- 理解 DAG、Task、Operator、Scheduler 等概念
- 对比 Airflow、dbt、Prefect、Luigi 的定位
- 能阅读一个简单的每日 ETL DAG 结构
为什么需要编排
| cron 痛点 | 编排器能力 |
|---|---|
| 任务 B 依赖 A 完成 | DAG 边定义依赖 |
| 失败无统一重试 | retry、告警、SLA |
| 无运行历史 | Web UI、日志、血缘 |
| 环境参数散落 | Variables / Connections |
Apache Airflow
事实标准之一,Python 定义 DAG:
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime
with DAG("tracks_daily", start_date=datetime(2026, 1, 1), schedule="@daily") as dag:
extract = PythonOperator(task_id="extract_tracks", python_callable=extract_fn)
load = PythonOperator(task_id="load_staging", python_callable=load_fn)
extract >> load
| 概念 | 含义 |
|---|---|
| DAG | 工作流定义 |
| Task | 一个步骤 |
| Operator | Task 类型(Python, Bash, SQL) |
| XCom | Task 间传小数据 |
部署可用 Docker Compose;与 docker-compose 思路一致。
dbt(data build tool)
SQL 转换层专用:models、tests、docs 全在 Git。
-- models/mart/mart_track_stats.sql
SELECT track_id, COUNT(*) AS lesson_count
FROM {{ ref('stg_lessons') }}
GROUP BY track_id
Airflow 负责 何时跑;dbt 负责 怎么转。二者常组合。
Prefect、Luigi 为备选;练习栈推荐 Airflow 调度 + dbt 转换 + Git 版本化。
与路线图的关系
- /roadmaps/data-engineer — Orchestration 节点
- de-practice — 综合 DAG 设计
- github-actions-essentials — CI 测 dbt,非替代调度