什么是 Airflow®?¶
Apache Airflow® 是一个开源平台,用于开发、调度和监控面向批处理的工作流。 Airflow 的可扩展 Python 框架使您能够构建与几乎任何技术连接的工作流。 Web 界面有助于管理工作流的状态。 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 的状态在 Web 界面中可见。
此示例演示了一个简单的 Bash 和 Python 脚本,但这些任务可以运行任何任意代码。想想运行 Spark 作业、在两个存储桶之间移动数据或发送电子邮件。 相同的结构也可以随着时间的推移运行。
每一列代表一个 DAG 运行。这是 Airflow 中最常用的两个视图,但还有其他几个视图,允许您深入了解工作流的状态。
为什么选择 Airflow®?¶
Airflow® 是一个批处理工作流编排平台。 Airflow 框架包含与许多技术连接的操作符,并且可以轻松扩展以与新技术连接。 如果您的工作流具有明确的开始和结束,并且以规则的间隔运行,则可以将它们编程为 Airflow DAG。
如果您喜欢编码而不是点击,Airflow 是适合您的工具。 工作流定义为 Python 代码,这意味着:
工作流可以存储在版本控制中,以便您可以回滚到以前的版本。
工作流可以由多人同时开发。
可以编写测试来验证功能。
组件是可扩展的,您可以在广泛的现有组件集合的基础上进行构建。
丰富的调度和执行语义使您可以轻松定义复杂的管道,并以规则的间隔运行。 回填允许您在更改逻辑后在历史数据上(重新)运行管道。 并且在解决错误后重新运行部分管道的能力有助于最大化效率。
Airflow 的用户界面提供:
对以下两项内容的深入视图:
管道
任务
管道随时间推移的概述
从界面,您可以检查日志和管理任务,例如在失败的情况下重试任务。
Airflow 的开源性质确保您可以使用世界各地许多其他公司开发、测试和使用的组件。在活跃的社区中,您可以找到大量有用的资源,例如博客文章、文章、会议、书籍等。您可以通过多个渠道与其他同行联系,例如Slack 和邮件列表。
Airflow 作为一个平台是高度可定制的。 通过利用 Airflow 的公共接口,您可以扩展和自定义 Airflow 的几乎每个方面。
为什么不选择 Airflow®?¶
Airflow® 是为有限的批处理工作流而构建的。 虽然 CLI 和 REST API 允许触发工作流,但 Airflow 不是为无限运行的基于事件的工作流而构建的。 Airflow 不是流式解决方案。 但是,诸如 Apache Kafka 之类的流式系统通常会与 Apache Airflow 一起使用。 Kafka 可用于实时摄取和处理,事件数据被写入存储位置,而 Airflow 定期启动一个处理一批数据的工作流。
如果您喜欢点击而不是编码,Airflow 可能不是正确的解决方案。 Web 界面的目标是尽可能轻松地管理工作流,并且 Airflow 框架不断改进,以使开发人员的体验尽可能顺畅。 但是,Airflow 的理念是将工作流定义为代码,因此始终需要编码。