什么是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 的状态可在网页界面中查看:
这个示例展示了一个简单的Bash和Python脚本,但这些任务可以运行任何任意代码。想象一下运行Spark作业、在两个存储桶之间移动数据或发送电子邮件。同样的结构也可以随着时间的推移持续运行:
每列代表一个DAG运行实例。这是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可能不是合适的解决方案。网页界面旨在尽可能简化工作流管理,Airflow框架也在持续改进以使开发者体验更加顺畅。然而,Airflow的理念是将工作流定义为代码,因此编码始终是必需的。