apache/airflow
Apache Airflow - A platform to programmatically author, schedule, and monitor workflows
什么是 Apache Airflow?
Apache Airflow 是一个用于创建、调度和监控工作流的平台——但您不是通过点击 GUI,而是将工作流编写为代码。这使得它们更易于维护、版本控制、测试和与他人共享。
在 Airflow 中,工作流称为 DAG(有向无环图)。DAG 定义了一组任务及其必须运行的顺序。Airflow 调度器 会自动在 worker 机器组上执行这些任务,并遵循您定义的依赖关系。您还可以获得:
- 命令行工具 用于管理 DAG
- Web 界面 用于查看生产环境中运行的管道、监控进度并排查问题
它适合什么?
Airflow 最适合大部分静态且变化缓慢的工作流——其中结构在每次运行之间保持相似。它通常用于:
- 数据处理管道(但有一个注意事项,见下文)
- 机器学习工作流——训练、重新训练、评估和部署
- AI/LLM 管道——协调数据准备、工具调用、模型调用和评估等步骤(Airflow 编排步骤;它本身不作为 AI 代理)
Airflow 有一些强烈的观点:
- 任务应该是幂等的——运行两次任务应产生相同的结果,并且不会创建重复数据。
- 任务不应相互传递大量数据。它们可以使用称为 XCom 的功能传递少量元数据,但大量数据应由外部服务处理。
- 它不是流式解决方案,但通常用于批量处理实时数据(定期从流中拉取数据)。
类似的项目包括 Luigi、Oozie 和 Azkaban。
核心原则
- 动态——管道以代码定义,因此您可以以编程方式生成 DAG 并对其进行参数化。
- 可扩展——Airflow 有许多内置运算符(任务类型),并且可以扩展以满足您的需求。
- 灵活——使用 Jinja 模板引擎,允许丰富的自定义。
要求
Airflow 已针对特定版本进行测试:
- Python——例如,稳定版 3.3.2 支持 3.10–3.14
- 平台——AMD64/ARM64
- Kubernetes——各种版本(例如,稳定版支持 1.30–1.35)
- 数据库——PostgreSQL、MySQL、SQLite(SQLite 仅用于测试,不用于生产)
重要说明:
- MariaDB 未经测试或推荐。
- Airflow 运行在 POSIX 兼容操作系统(Linux、macOS)上。在 Windows 上,您可以使用 WSL2 或 Linux 容器。
- 官方 Docker 镜像使用 Debian Bookworm。
如何安装
Airflow 在 PyPI 上以 apache-airflow 包发布。安装可能很棘手,因为 Airflow 既是一个库又是一个应用程序——它保持依赖项开放,这意味着单独使用 pip install apache-airflow 可能并不总是有效。推荐的方法是使用约束文件来固定已知良好的依赖版本:
pip install 'apache-airflow==3.3.2' \
--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.3.2/constraints-3.10.txt"
您还可以添加 extras,例如 apache-airflow[postgres,google]。
仅官方支持 pip 和 uv 进行安装。不支持 Poetry 或 pip-tools 等工具(但如果您转换约束文件,则可以使用它们)。
获取 Airflow 的其他方式
这些是“便捷”包——不是官方的 ASF 版本,而是从官方源构建的:
- PyPI 版本——通过
pip - Docker 镜像——用于 Kubernetes、docker-compose 等。
- GitHub 标签——获取源代码
用户界面
Airflow Web UI 包括多个视图:
- DAGs——所有工作流的概览
- Assets——数据资产及其依赖项的视图
- Grid——DAG 运行的时间网格视图
- Graph——DAG 的任务依赖关系和当前状态的可视化
- Home——环境摘要统计信息
- Backfill——为特定日期范围运行 DAG
- Code——快速查看 DAG 的源代码
版本控制
自 Airflow 2.0.0 起,该项目遵循严格的语义化版本控制(SemVer)。这适用于核心 Airflow 和 provider 包。
项目管理
Apache Airflow 是 Apache 软件基金会 项目。官方源代码发布:
- 遵循 ASF 发布政策
- 经过加密签名
- 由项目的 PMC 成员投票决定
还有一个大型社区——您可以加入 Slack 频道、贡献代码等(详细信息请参阅 README 的贡献部分)。
此解释仅基于项目 README 的内容。
相关
- 项目
- 项目
- 项目
- 项目