1、课程导论:为什么需要工作流调度?Airflow与Dagster的定位与核心哲学对比
1.1 从“手动跑脚本”到“调度系统”
先问个问题:你手头有几个每天要跑的数据任务?
我见过不少团队,一开始就三五张表,crontab 搞定一切。后来表多了,依赖复杂了,今天 A 任务挂了,B 任务还在傻等,C 任务跑出来一堆脏数据。嗯,这时候你就需要一套正经的调度系统了。
说白了,工作流调度要解决三件事:
- 按时执行 —— 别让我半夜爬起来点“运行”
- 依赖管理 —— 上游没跑完,下游别动
- 失败处理 —— 挂了能重试、能报警、能定位
我个人习惯把调度系统比作“数据工厂的流水线班长”。它不生产数据,但它确保每个环节在正确的时间、用正确的原料、产出正确的结果。
核心观点: 调度系统不是“锦上添花”,而是数据工程的“基础设施”。没有它,你的数据管道就是一堆随时可能炸裂的定时炸弹。
1.2 Airflow 的定位:老牌“调度引擎”
Airflow 2015 年从 Airbnb 开源,到现在几乎是行业默认标准。它的核心哲学是什么?
- DAG 即代码 —— 用 Python 定义有向无环图,每个节点是一个 Operator
- 调度优先 —— 它天生就是为“定时执行”设计的,调度器是心脏
- 生态庞大 —— 各种 Operator 插件,从 Hive 到 Kubernetes 全覆盖
我记得刚接触 Airflow 时,最让我舒服的是它的调度语义:start_date + schedule_interval,配合 backfill 机制,补数据特别顺手。你想想看,一个系统能让你轻松回填过去三个月的任务,这在生产环境有多重要。
避坑指南: 我曾经在 Airflow 里踩过一个坑——start_date 设置不当导致任务重复执行。后来我养成了习惯:所有 DAG 的 start_date 都用固定的过去时间,配合 catchup=False,避免意外回填。
1.3 Dagster 的定位:新一代“数据平台”
Dagster 2019 年才出现,比 Airflow 年轻不少。它的定位不太一样——它不只想做调度,更想做“数据应用的开发平台”。
- Asset 为中心 —— 不关心任务,关心“你生产了什么数据资产”
- 类型与验证 —— 输入输出有类型检查,跑之前就能发现错误
- 可观测性 —— 每个 asset 的血缘、状态、日志都一目了然
我刚开始用 Dagster 时其实不太习惯。它不强调“调度”,而是强调“数据资产的血缘”。但用了一段时间后,我发现这种思路在数据湖/数据 Mesh 场景下特别香——你不再问“这个任务跑没跑”,而是问“这张表的数据是不是最新的”。
注意: Dagster 的学习曲线比 Airflow 陡。它的概念更多(solid、asset、op、job、graph……),但一旦上手,你会发现它在数据质量、测试、调试方面比 Airflow 强太多。
1.4 核心哲学对比:调度 vs 资产
这是本章最核心的部分。我直接给你一张对比表,你一看就明白:
| 维度 | Airflow | Dagster |
|---|---|---|
| 核心抽象 | DAG(任务依赖图) | Asset(数据资产) |
| 调度方式 | 定时调度 + 依赖触发 | 定时调度 + 资产感知触发 |
| 数据质量 | 靠外部检查(如 Great Expectations) | 内建类型系统 + 验证 |
| 可测试性 | 一般,需要 mock 外部系统 | 强,op 可以独立测试 |
| 生态成熟度 | 极高,插件丰富 | 中等,但增长快 |
| 适用场景 | 传统 ETL、定时批处理 | 数据平台、数据湖、数据产品 |
说白了,Airflow 是“调度引擎”,它告诉你任务什么时候跑、按什么顺序跑。Dagster 是“数据平台”,它告诉你数据从哪里来、质量怎么样、最终产出什么。
1.5 一张图看懂两者的定位差异
下面这张 SVG 图,我画了两者的核心关注点对比。你看完就明白为什么我说“选 Airflow 还是 Dagster,本质是选调度哲学还是数据哲学”。
1.6 我个人的选择建议
如果你问我怎么选,我的回答是:
- 团队刚起步、任务简单、需要快速上线 —— 选 Airflow。生态成熟,社区问题一搜就有,招人也容易。
- 团队有一定规模、数据资产多、重视数据质量 —— 选 Dagster。它的 asset 模型和类型系统能帮你少踩很多坑。
- 两者都学? 我建议先精通一个,再学另一个。底层逻辑是相通的——DAG、依赖、调度、重试,这些概念在哪个系统里都一样。
我的经验: 我曾经在一个中型数据团队里,从 Airflow 迁移到 Dagster。迁移过程并不轻松,但迁移完成后,数据质量问题的排查时间从平均 2 小时降到了 20 分钟。原因很简单——Dagster 让你一眼看到数据血缘,而不是在日志里翻任务依赖。
1.7 本章小结
这一章我们聊了:
- 为什么需要工作流调度 —— 从手动到自动,从混乱到有序
- Airflow 的定位 —— 调度引擎,DAG 即代码,生态成熟
- Dagster 的定位 —— 数据平台,资产为中心,质量内建
- 两者的核心哲学对比 —— 调度 vs 资产,执行 vs 治理
接下来的章节,我们会深入两者的架构、代码、部署、运维等细节。你准备好了吗?