用途
Apache Airflow 是一个开源平台,用于以编程方式编写、调度和监控工作流。它允许使用 Python 代码将工作流定义为有向无环图(DAG),使复杂的工作流编排可维护并纳入版本控制。本技能用于掌握 Airflow 工作流编排,覆盖 DAG 开发、算子、传感器、任务依赖、动态工作流、XCom 通信、调度模式和生产部署策略。
适用场景包括:构建和管理带任务依赖的复杂数据管道;编排跨多个系统的 ETL/ELT 工作流;调度和监控批处理作业;协调多步数据转换;管理带条件执行和分支的工作流;实现事件驱动或基于资产的工作流;部署生产级工作流自动化;创建以编程方式生成任务的动态工作流;协调跨集群的分布式任务执行;构建带工作流编排的数据工程平台。
核心概念
关键原则:动态(工作流用 Python 定义,支持动态生成)、可扩展(丰富的算子、传感器和钩子生态)、可伸缩(可从单机扩展到大型集群)、可观测(提供全面的 UI 用于监控和排障)。
DAG(有向无环图)是组织起来反映任务关系与依赖的任务集合。DAG 属性包括:dag_id(唯一标识符)、start_date(开始被调度的日期)、schedule(运行频率,cron、timedelta 或基于资产)、catchup(激活时是否补跑错过的区间)、tags(用于组织和过滤的标签)、default_args(DAG 中所有任务的默认参数)。
任务(Task)是 Airflow 中的基本执行单元,算子(Operator)是创建任务的模板。常见算子类型:BashOperator(执行 bash 命令)、PythonOperator(执行 Python 函数)、EmailOperator(发送邮件)、EmptyOperator(占位/空任务)、自定义算子(针对特定需求)。算子与任务的区别:算子是模板/类定义,任务是带具体参数的算子实例化。
任务依赖定义执行顺序和工作流结构。依赖操作符:>> 设置下游依赖(task1 >> task2)、<< 设置上游依赖(task2 << task1)、chain() 为多个任务设置顺序依赖、cross_downstream() 设置多对多关系。
执行器决定任务如何以及在何处运行:SequentialExecutor(单线程、本地,默认,不用于生产)、LocalExecutor(多线程、单机)、CeleryExecutor(使用 Celery 的分布式执行)、KubernetesExecutor(每个任务在独立 Kubernetes pod 中运行)、DaskExecutor(使用 Dask 的分布式执行)。
调度器监控所有 DAG 及其任务,根据依赖和调度触发任务实例,将任务提交给执行器执行,并处理重试和任务状态管理。启动命令:airflow scheduler。
主要能力
DAG 开发模式:基本 DAG 结构、任务依赖与链(线性链、动态链、成对链、cross_downstream)、分支与条件执行(BranchPythonOperator、自定义分支算子)、TaskGroup 组织、边标签(Label)、LatestOnlyOperator。
算子深入:BashOperator(支持环境变量、复杂 bash 命令)、PythonOperator(支持 op_kwargs、provide_context,传统 ETL 示例)、EmailOperator、EmptyOperator、自定义算子(继承 BaseOperator)。
传感器深入:传感器是等待特定条件满足后再继续的特殊算子。包括 ExternalTaskSensor(等待其他 DAG 中的任务,支持可延迟模式)、FileSensor(等待文件出现)、TimeDeltaSensor(等待特定时间段)、BigQuery 表存在性传感器、自定义传感器(继承 BaseSensorOperator)、可延迟传感器(等待时释放 worker 槽位)。
XCom(跨通信):通过存储和检索数据实现任务间通信。支持 xcom_push/xcom_pull,以及 TaskFlow API 自动管理 XCom。
使用方式
以 Python 代码定义 DAG,使用 with DAG(...) as dag 上下文管理器声明 dag_id、start_date、schedule、catchup、tags 等属性,在上下文中实例化算子并设置依赖关系。通过 airflow scheduler 启动调度器。
限制
资料未提供具体版本要求、安装命令、依赖项、性能基准、收费或价格信息。部分内容(如 XCom with TaskFlow API 段落)在资料中未完整给出。