我很高兴地宣布 Apache Airflow 2.2.0 已正式发布。自 2.1.4 以来累计超过 600 次提交,新增 30 项功能,改进 84 项,修复 85 个漏洞,并带来大量内部及文档更新。

详情:

📦 PyPI: https://pypi.ac.cn/project/apache-airflow/2.2.0/
📚 文档: https://airflow.org.cn/docs/apache-airflow/2.2.0/
🛠️ 更新日志: https://airflow.org.cn/docs/apache-airflow/2.2.0/changelog.html
🐳 Docker 镜像: docker pull apache/airflow:2.2.0
🚏 约束文件: https://github.com/apache/airflow/tree/constraints-2.2.0

由于变更日志非常庞大,以下列出本次发布中一些值得注意的新特性。

自定义时间表 (AIP-39)

Airflow 过去一直使用 Cron 表达式和 timedeltas 来表示 DAG 的运行时间。这对许多场景已经足够,但并非全部。例如,想在周一到周五每天运行,而周末不运行,这在以前是做不到的。

为提供更灵活的调度方式,现在采用 Timetable(时间表)来决定 DAG 的运行时机。向后兼容性得以保留——Cron 表达式和 timedeltas 仍然完整支持;同时 Timetable 是可插件化的,你可以自行实现自定义时间表以满足特定需求!例如,你可以编写一个时间表来调度一次 DagRun。

长期以来 execution_date 对新手 Airflower 来说非常混淆,因而在此次改动中引入了一个新概念 data_interval,用于表示任务应当处理的数据时间段。现在提供以下几个属性:

  • logical_date(亦称 execution_date
  • data_interval_start(在 Cron 场景下与 execution_date 值相同)
  • data_interval_end(亦称 next_execution_date

如果你编写自己的时间表,请注意它们应具备幂等性且执行快速,因为调度器会在创建 DagRun 时频繁调用它们。

更多信息请参见:使用时间表自定义 DAG 调度

可延期任务 (AIP-40)

可延期任务允许 operator 或 sensor 在轻量级的异步检查通过之前自行挂起,随后再继续执行。最重要的是,这会将工作槽以及其占用的资源归还给 Airflow,从而让监控外部系统任务或等待事件等场景的资源消耗大幅下降。

为支持该特性,Airflow 新增了一个组件——triggerer,它是运行 asyncio 事件循环的守护进程。

Airflow 2.2.0 附带了两个可延期传感器:DateTimeSensorAsyncTimeDeltaSensorAsync,两者均可直接替代对应的传统传感器。

更多信息请参见:

可延期的操作符与触发器

自定义 @task 装饰器以及 @task.docker

Airflow 2.2.0 允许提供者在 TaskFlow 接口中创建自定义的 @task 装饰器。

@task.docker 装饰器即为其一,能够让函数在 Docker 容器中运行。Airflow 会负责将代码放入容器并返回 XCom,用户只需关注函数本身。当 Airflow 本身的依赖与任务所需的依赖冲突时,这特别有用。

关于如何创建自定义 @task 装饰器的更多信息,请访问:创建自定义 @task 装饰器

关于 @task.docker 装饰器的更多信息,请访问:使用 Taskflow API 与 Docker 或虚拟环境

DAG 参数验证

现在可以通过为每个参数传入 Param 对象来执行验证。Param 对象支持完整的 JSON‑Schema 验证规范

目前该功能只在手动触发的 DAG 上生效,但它为未来更丰富的参数功能奠定了基础。

更多信息请参见:Params

其他小功能

以下并非完整列表,但列出了一些值得关注或有趣的小功能:

  • 在 UI 中测试连接——验证你的 Connection 凭据是否真正可用
  • 在 UI 中复制 Connection
  • 在 UI 中显示 DAG 的 “下次运行” 信息,包括实际启动时间
  • airflow standalone 命令直接在本机运行所有 Airflow 组件,无需 Docker——非常适合本地开发

贡献者

感谢所有为本次发布做出贡献的人员:Andrew Godwin、Ash Berlin‑Taylor、Brent Bovenzi、Elad Kalif、Ephraim Anierobi、James Timmins、Jarek Potiuk、Jed Cunningham、Josh Fell、Kamil Breguła、Kaxil Naik、Malthe Borch、Sam Wheating、Sumit Maheshwari、Tzu‑ping Chung 以及其他众多贡献者

分享

阅读更多

Apache Airflow 2.9.0:数据集和 UI 改进

Jed Cunningham

Apache Airflow 2.9.0 已上线!本次带来了大量激动人心的数据集和 UI 新特性/改进。

Apache Airflow 2.7.0 已上线

Jed Cunningham

Apache Airflow 2.7.0 已发布!