我很高兴宣布 Apache Airflow 2.10.0 现已发布,带来了众多值得关注的增强功能和新特性,将极大地服务我们的社区。

详情:

📦 PyPI: https://pypi.ac.cn/project/apache-airflow/2.10.0/
📚 文档: https://airflow.org.cn/docs/apache-airflow/2.10.0/
🛠 发布说明: https://airflow.org.cn/docs/apache-airflow/2.10.0/release_notes.html
🐳 Docker 镜像: “docker pull apache/airflow:2.10.0”
🚏 约束文件 (Constraints): https://github.com/apache/airflow/tree/constraints-2.10.0

Airflow 现在默认收集遥测 (Telemetry) 数据

随着 Airflow 2.10.0 的发布,我们引入了基础遥测数据的收集功能,具体说明见此处。这些数据将发挥至关重要的作用,帮助 Airflow 维护者更深入地了解 Airflow 在各种部署环境中的使用情况。从这些信息中获得的洞察对于指导补丁、小版本发布和安全修复的优先级具有无价的价值。此外,这些数据还将为开发路线图的关键决策提供信息,确保 Airflow 持续根据社区需求进行发展。

对于不希望参与数据收集的用户,可以通过将 [usage_data_collection] enabled 选项设置为 False,或使用 SCARF_ANALYTICS=false 环境变量轻松选择退出。

多执行器配置(前称“混合执行”)

每种执行器都有其独特的优点和缺点,通常需要在延迟、隔离和计算效率之间取得平衡。传统上,一个 Airflow 环境仅限于使用一个执行器,这要求用户做出权衡,因为没有一种执行器能够完美适用于所有类型的任务。

我们正在引入一项新功能,允许在单个 Airflow 环境中同时使用多个执行器。这种灵活性使用户可以针对不同的任务利用不同执行器的特定优势,从而提高整体效率并弥补不足。用户可以为整个环境设置一个默认执行器,并在需要时将特定的执行器分配给单个 DAG 或任务。

要配置多个执行器,我们可以在 Airflow 配置中传递一个逗号分隔的列表。列表中的第一个执行器将成为环境的默认执行器。

[core]
executor = 'LocalExecutor,CeleryExecutor'

为了方便 DAG 作者,我们还可以在执行器配置中为执行器指定别名。

[core]
executor = 'LocalExecutor,KubernetesExecutor,my.custom.module.ExecutorClass:ShortName'

DAG 作者可以在任务级别指定要使用的执行器

BashOperator(
    task_id="hello_world",
    executor="ShortName",
    bash_command="echo 'hello world!'",
)

@task(executor="KubernetesExecutor")
def hello_world():
    print("hello world!")

我们还可以在 DAG 级别指定执行器

def hello_world():
    print("hello world!")

def hello_world_again():
    print("hello world again!")

with DAG(
    dag_id="hello_worlds",
    default_args={"executor": "ShortName"},  # Applies to all tasks in the DAG
) as dag:
    # All tasks will use the executor from default args automatically
    hw = hello_world()
    hw_again = hello_world_again()

通过 DatasetAlias 实现动态数据集调度

Airflow 2.10 引入了 DatasetAlias 类,可以作为任务的 outletsinlets 或 DAG 的 schedule 参数的值传递。DatasetAlias 的一个实例会被动态解析为真实的 dataset。下游可以依赖于解析后的 dataset,也可以依赖于别名本身。

DatasetAlias 有一个参数 name,用于唯一标识数据集。任务必须首先将该别名声明为 outlet,并使用 outlet_eventsyield Metadata 向其添加事件。

通过 outlet_events 在任务执行期间发出数据集事件

from airflow.datasets import DatasetAlias

@task(outlets=[DatasetAlias("my-task-outputs")])
def my_task_with_outlet_events(*, outlet_events):
    outlet_events["my-task-outputs"].add(Dataset("s3://bucket/my-task"))

通过 yielding Metadata 在任务执行期间发出数据集事件

from airflow.datasets.metadata import Metadata

@task(outlets=[DatasetAlias("my-task-outputs")])
def my_task_with_metadata():
    s3_dataset = Dataset("s3://bucket/my-task}")
    yield Metadata(s3_dataset, alias="my-task-outputs")

基于数据集别名的调度有两种选择。基于 DatasetAlias 或真实数据集进行调度。

with DAG(dag_id="dataset-alias-producer"):
    @task(outlets=[DatasetAlias("example-alias")])
    def produce_dataset_events(*, outlet_events):
        outlet_events["example-alias"].add(Dataset("s3://bucket/my-task"))

with DAG(dag_id="dataset-consumer", schedule=Dataset("s3://bucket/my-task")):
    ...

with DAG(dag_id="dataset-alias-consumer", schedule=DatasetAlias("example-alias")):
    ...

数据集别名 UI 增强

现在,用户可以在每个跨 DAG 依赖图的图例中看到数据集别名及其对应的图标/颜色。

DAG Dependencies graph

Airflow UI 深色模式

Airflow 2.10 带来了全新的深色模式功能,旨在通过提供一种更舒适的视觉主题来增强用户体验,尤其是在弱光环境下。您可以单击导航栏右侧的月牙图标在浅色模式和深色模式之间切换。

Airflow Dark mode

Airflow Light mode

任务实例历史记录

在 Apache Airflow 2.10.0 中,当任务实例被重试或清除时,其执行历史记录会得到保留。您可以通过在 Grid 视图中单击任务实例来查看此历史记录,从而访问每次尝试的信息,例如日志、执行时长以及任何失败。此功能提高了任务执行过程的透明度,使您更容易排除故障和分析您的 DAG。

Task instance history

历史记录显示了每次特定运行的任务实例属性的最终值。在日志页面,您还可以访问任务实例每次尝试的日志。此信息对于调试非常有用。

Task instance history

数据集 UI 增强

数据集页面已经过改进,包含了重点展示数据集事件的部分,并增加了额外的详细信息,例如 extras、消费 DAG 和生产任务。数据集列表

现在,我们在新标签页中提供了独立的依赖图和数据集列表页面,增强了用户体验。

Dataset dependency graph

数据集事件现在在每个 DAG 运行的“详情”选项卡和 DAG 图中都有显示。

Dataset list

在图中切换数据集显示

我们现在可以在 DAG 图中切换数据集的显示

Dataset toggle button on Dataset toggle button off

DAG 图视图中的数据集条件

我们现在以逻辑门的形式显示图视图。带有实际事件的数据集会以不同的边框高亮显示,使得更容易查看是什么触发了选定的运行。

Render dataset conditions in graph view

DAG 图中的数据集事件信息

对于一次 DAG 运行,用户现在可以直接在图视图中查看与之关联的数据集事件。

Dataset event info

按需重新解析 DAG

在 2.10 中,用户现在可以在 DAG 列表和 DAG 详情页面使用下方按钮按需重新解析 DAG。

DAG Reparsing button on DAG list page DAG Reparsing button on DAG detail page

其他新特性

由于新特性太多无法全部列出,这里仅介绍其中一些有趣的新特性

  • 可延迟算子 (Deferrable operators) 现在可以直接从触发器 (triggerer) 执行,而无需通过工作节点 (worker)。这对于某些算子(如传感器)来说尤其高效,可以帮助团队节省时间和金钱。
  • 关键的执行器日志现已集成到任务日志中。如果执行器启动任务失败,相关的错误消息将在任务日志中显示,简化了调试过程。

贡献者

感谢为本次发布做出贡献的每一个人,包括 Andrey Anshin, Brent Bovenzi, Daniel Standish, Ephraim Anierobi, Hussein Awala, Jarek Potiuk, Jed Cunningham, Jens Scheffler, Tzu-ping Chung, Vincent,以及其他 63 多位贡献者!

希望您喜欢使用 Apache Airflow 2.10.0!

分享

延伸阅读

Apache Airflow® 3 已正式发布!

Kaxil Naik , Vikram Koka

我们很荣幸宣布 Apache Airflow 3.0.0 已发布。

Apache Airflow 2.9.0:数据集和 UI 改进

Jed Cunningham

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