Airflow Summit 2025 将于 10 月 07-09 日举行。立即注册以获得早鸟票!

什么是 Airflow®?

Apache Airflow® 是一个开源平台,用于开发、调度和监控批处理工作流。Airflow 可扩展的 Python 框架使您能够构建连接几乎任何技术的工作流。基于 Web 的用户界面可帮助您可视化、管理和调试工作流。您可以运行 Airflow 的多种配置—从笔记本电脑上的单个进程到能够处理海量工作负载的分布式系统。

工作流即代码

Airflow 工作流完全在 Python 中定义。这种“工作流即代码”的方法带来了几个优势

  • 动态性:流水线在代码中定义,可以动态生成 DAG 并进行参数化。

  • 可扩展性:Airflow 框架包含广泛的内置 operators,并且可以根据您的需求进行扩展。

  • 灵活性:Airflow 利用 Jinja 模板引擎,允许进行丰富的自定义。

DAG

DAG 是一个模型,它封装了执行工作流所需的一切。一些 DAG 属性包括以下内容

  • 调度:工作流应何时运行。

  • 任务任务 是在 worker 上运行的离散工作单元。

  • 任务依赖任务 执行的顺序和条件。

  • 回调:当整个工作流完成时要采取的操作。

  • 附加参数:以及许多其他操作细节。

让我们来看一个定义简单 DAG 的代码片段

from datetime import datetime

from airflow.sdk import DAG, task
from airflow.providers.standard.operators.bash import BashOperator

# A DAG represents a workflow, a collection of tasks
with DAG(dag_id="demo", start_date=datetime(2022, 1, 1), schedule="0 0 * * *") as dag:
    # Tasks are represented as operators
    hello = BashOperator(task_id="hello", bash_command="echo hello")

    @task()
    def airflow():
        print("airflow")

    # Set dependencies between tasks
    hello >> airflow()

在这里您可以看到

  • 一个名为 "demo" 的 DAG,计划从 2022 年 1 月 1 日开始每天运行。DAG 是 Airflow 表示工作流的方式。

  • 两个任务:一个使用 BashOperator 运行 shell 脚本,另一个使用 @task 装饰器定义 Python 函数。

  • >> 运算符定义了两个任务之间的依赖关系,并控制执行顺序。

Airflow 解析脚本,调度任务,并按定义的顺序执行它们。"demo" DAG 的状态显示在 Web 界面中

Demo DAG in the Graph View, showing the status of one DAG run along with DAG code.

此示例使用简单的 Bash 命令和 Python 函数,但 Airflow 任务几乎可以运行任何代码。您可以使用任务来运行 Spark 作业、在存储桶之间移动文件或发送通知电子邮件。这是同一 DAG 随时间变化的的样子,包含多次运行

Demo DAG in the Grid View, showing the status of all DAG runs, as well as logs for a task instance

网格中的每一列代表一次 DAG 运行。虽然图视图和网格视图最常使用,但 Airflow 提供了几种其他视图来帮助您监控和排除工作流故障—例如 DAG 概览 视图

Overview of a complex DAG in the Grid View, showing the status of all DAG runs, as well as quick links to recently failed task logs

注意

术语“DAG”源自数学概念“有向无环图”(directed acyclic graph),但在 Airflow 中的含义已经远远超出了仅与数学 DAG 概念相关的字面数据结构。

为什么选择 Airflow®?

Airflow 是一个用于编排批处理工作流的平台。它提供了一个灵活的框架,包含广泛的内置 operators,并且易于与新技术集成。

如果您的工作流有明确的开始和结束,并且按计划运行,那么它们非常适合 Airflow DAG。

如果您更喜欢通过代码而不是点击来工作,Airflow 就是为您而设计的。将工作流定义为 Python 代码提供了几个关键优势

  • 版本控制:跟踪变更、回滚到先前版本,并与您的团队协作。

  • 团队协作:多个开发者可以处理同一个工作流代码库。

  • 测试:通过单元测试和集成测试验证流水线逻辑。

  • 可扩展性:使用庞大的现有组件生态系统来自定义工作流—或构建您自己的组件。

Airflow 丰富的调度和执行语义使其易于定义复杂、周期性的流水线。从 Web 界面,您可以手动触发 DAG、检查日志和监控任务状态。您还可以回填 DAG 运行以处理历史数据,或仅重新运行失败的任务以最大限度地降低成本和时间。

Airflow 平台高度可定制。使用Airflow 公共接口,您可以扩展和调整系统的几乎每个部分—从 operators 到 UI 插件再到执行逻辑。

因为 Airflow 是开源的,所以您正在基于由全球社区开发、测试和维护的组件进行构建。您会找到丰富的学习资源,包括博文、书籍和会议演讲—并且您可以通过社区Slack 和邮件列表与其他人联系。

为什么不选择 Airflow®?

Airflow® 专为有限的、面向批处理的工作流而设计。虽然您可以使用 CLI 或 REST API 触发 DAG,但 Airflow 不适用于持续运行的、事件驱动的或流式工作负载。话虽如此,Airflow 通常与 Apache Kafka 等流系统相辅相成。Kafka 处理实时数据摄取,将数据写入存储。然后 Airflow 可以定期获取这些数据并进行批处理。

如果您更喜欢点击而不是编写代码,Airflow 可能不是最适合您的。Web UI 简化了工作流管理,并且开发者体验正在持续改进,但将工作流定义为代码是 Airflow 工作方式的核心—因此始终需要进行一些编码。

此条目有帮助吗?