什么是Airflow®?

Apache Airflow® 是一个用于开发、调度和监控批处理工作流的开源平台。Airflow的可扩展Python框架使您能够构建与几乎任何技术连接的工作流。通过网页界面可以管理工作流的状态。Airflow支持多种部署方式,从笔记本电脑上的单个进程到分布式设置,甚至支持最庞大的工作流。

工作流即代码

Airflow工作流的主要特点是所有工作流都是用Python代码定义的。"工作流即代码"具有以下几个目的:

  • 动态性: Airflow管道通过Python代码配置,支持动态生成管道。

  • 可扩展性: Airflow® 框架包含与多种技术连接的算子。所有Airflow组件都可扩展,能轻松适应您的环境。

  • 灵活: 工作流参数化内置利用了Jinja模板引擎。

看看以下这段代码片段:

from datetime import datetime

from airflow import DAG
from airflow.decorators import task
from airflow.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运行Bash脚本和一个使用@task装饰器定义的Python函数

  • >> 任务之间的符号定义了依赖关系,并控制任务的执行顺序

Airflow 会评估此脚本并按设定的时间间隔和定义的顺序执行任务。"demo" DAG 的状态可在网页界面中查看:

Demo DAG in the Graph View, showing the status of one DAG run

这个示例展示了一个简单的Bash和Python脚本,但这些任务可以运行任何任意代码。想象一下运行Spark作业、在两个存储桶之间移动数据或发送电子邮件。同样的结构也可以随着时间的推移持续运行:

Demo DAG in the Grid View, showing the status of all DAG runs

每列代表一个DAG运行实例。这是Airflow中最常用的两个视图,此外还提供多个其他视图,可让您深入查看工作流状态。

为什么选择Airflow®?

Airflow® 是一个批量工作流编排平台。该框架包含与多种技术对接的操作器,并能轻松扩展以连接新技术。如果您的工作流具有明确的起点和终点,并按固定间隔运行,则可以将它们编程为Airflow DAG。

如果你更喜欢编码而非点击操作,Airflow就是你的理想工具。工作流可以通过Python代码定义,这意味着:

  • 工作流可以存储在版本控制系统中,以便您可以回滚到以前的版本

  • 工作流可以由多人同时开发

  • 可以编写测试来验证功能

  • 组件是可扩展的,您可以在大量现有组件的基础上进行构建

强大的调度和执行语义使您能够轻松定义定期运行的复杂流水线。回填功能允许您在修改逻辑后对历史数据重新运行流水线。在解决错误后重新运行部分流水线的能力有助于最大化效率。

Airflow的用户界面提供:

  1. 深入查看以下两项内容:

  1. 流水线

  2. 任务

  1. 您的流水线随时间变化的概览

通过该界面,您可以查看日志并管理任务,例如在任务失败时进行重试。

Airflow的开源特性确保您使用的是由全球众多公司开发、测试和使用的组件。在这个活跃的社区中,您可以找到大量有用的资源,包括博客文章、文章、会议、书籍等。您可以通过Slack和邮件列表等多种渠道与其他同行联系。

Airflow作为一个平台具有高度可定制性。通过利用Airflow的公共接口,您可以扩展和定制Airflow的几乎每个方面。

为什么不选择Airflow®?

Airflow® 专为有限批处理工作流而设计。虽然CLI和REST API确实支持触发工作流,但Airflow并非为无限运行的基于事件的工作流构建。Airflow不是流式解决方案。不过,像Apache Kafka这样的流处理系统常与Apache Airflow协同工作。Kafka可用于实时数据摄取和处理,事件数据会被写入存储位置,而Airflow则会定期启动工作流来处理批量数据。

如果您更喜欢点击操作而非编码,那么Airflow可能不是合适的解决方案。网页界面旨在尽可能简化工作流管理,Airflow框架也在持续改进以使开发者体验更加顺畅。然而,Airflow的理念是将工作流定义为代码,因此编码始终是必需的。

这篇内容对您有帮助吗?