我很高兴地宣布 Apache Airflow 2.2.0 已发布。自 2.1.4 版本以来,该版本包含了 600 多次提交,其中包括 30 个新特性、84 项改进、85 个 bug 修复以及许多内部和文档的更改。

详情:

📦 PyPI: https://pypi.ac.cn/project/apache-airflow/2.2.0/
📚 Docs: https://airflow.org.cn/docs/apache-airflow/2.2.0/
🛠️ Changelog: https://airflow.org.cn/docs/apache-airflow/2.2.0/changelog.html
🐳 Docker Image: docker pull apache/airflow:2.2.0
🚏 Constraints: https://github.com/apache/airflow/tree/constraints-2.2.0

由于变更日志篇幅较大,以下是此版本中一些值得关注的新特性。

自定义时间表 (AIP-39)

Airflow 历来使用 cron 表达式和 timedeltas 来表示 DAG 何时应该运行。这适用于许多使用案例,但并非全部。例如,实现在工作日(周一至周五)每天运行,但周末不运行,这在以前是不可能的。

为了提供更大的调度灵活性,现在通过 Timetables 来确定 DAG 何时运行。当然,保持了向后兼容性——cron 表达式和 timedeltas 仍然完全支持;然而,timetables 是可插拔的,因此您可以添加自己的自定义 timetable 来满足您的需求!例如,您可以编写一个 timetable 来调度 DagRun

对于 Airflow 新用户来说,execution_date 一直以来都令人困惑,因此作为此更改的一部分,Airflow 添加了一个名为 data_interval 的新概念来取代它,它表示任务应该处理的数据周期。现在提供以下内容:

  • logical_date (即 execution_date)
  • data_interval_start (对于 cron 来说,与 execution_date 值相同)
  • data_interval_end (即 next_execution_date)

如果您编写自己的 timetables,请记住它们应该是幂等的且快速的,因为它们在调度程序中用于创建 DagRuns。

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

可延迟任务 (AIP-40)

可延迟任务允许 operator 或 sensor 将自身延迟,直到轻量级的异步检查通过,此时它们可以恢复执行。最重要的是,这使得 worker 插槽,尤其是其使用的任何资源,得以返回给 Airflow。这使得监控外部系统中的作业或等待事件等简单操作的成本大大降低。

为了支持此功能,Airflow 添加了一个新组件,即 triggerer,它是一个运行 asyncio 事件循环的守护进程。

Airflow 2.2.0 内置了 2 个可延迟 sensor:DateTimeSensorAsyncTimeDeltaSensorAsync,它们都是现有相应 sensor 的直接替代品。

更多信息请参见

可延迟 Operators & Triggers

自定义 @task decorators 和 @task.docker

Airflow 2.2.0 允许 provider 在 TaskFlow 接口中创建自定义 @task decorator。

@task.docker decorator 就是这样一种 decorator,它允许您在 docker 容器中运行函数。Airflow 负责将代码放入容器并返回 xcom——您只需关注您的函数即可。当 Airflow 本身与您需要运行的任务之间存在依赖冲突时,这尤其有用。

有关创建自定义 @task decorator 的更多信息,请参见:创建自定义 @task Decorators

有关 @task.docker decorator 的更多信息,请参见:将 Taskflow API 与 Docker 或虚拟环境一起使用

DAG 参数验证

现在您可以通过为每个参数传递一个 Param 对象来对 DAG 参数应用验证。Param 对象支持完整的 json-schema 验证规范

目前此功能仅适用于手动触发的 DAG,但它为未来与参数相关的功能奠定了基础。

更多信息请参见:参数

其他小特性

这并非一个完整的列表,但一些值得注意或有趣的小特性包括:

  • 从 UI 测试 Connection - 测试您的 Connection 凭据是否实际有效
  • 从 UI 复制 Connection
  • DAG 的“下次运行”信息在 UI 中显示,包括实际何时开始运行
  • 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: Dataset 和 UI 改进

Jed Cunningham

Apache Airflow 2.9.0 发布啦!本次带来了许多令人兴奋的新 Dataset 和 UI 特性/改进。

Apache Airflow 2.7.0 发布啦

Jed Cunningham

Apache Airflow 2.7.0 已发布!