Airflow 公共接口

Apache Airflow 的公共接口是 Apache Airflow 中的一组接口和行为,其更改受语义版本控制的约束。用户通过创建和管理 DAG、管理任务和依赖关系,以及通过编写新的执行器、插件、操作器和提供程序来扩展 Airflow 功能,来与 Airflow 的公共接口进行交互。公共接口可用于构建自定义工具和与其他系统的集成,以及自动化 Airflow 工作流的某些方面。

使用 Airflow 公共接口

以下是 Airflow 公共接口的一些示例

  • 当您编写自己的操作器或钩子时。这通常在您的用例不存在钩子或操作器时完成,或者可能在存在钩子或操作器但您需要自定义行为时完成。

  • 编写新的 插件 来扩展 Airflow 的功能,使其超出 DAG 构建块。密钥、时间表、触发器、监听器都是此类功能的示例。这通常由管理 Airflow 实例的用户完成。

  • 通过 提供程序包 将自定义操作器、钩子、插件捆绑在一起发布 - 这通常由那些打算为 Airflow 集成的外部服务或应用程序提供可重用功能集的人完成。

  • 使用任务流 API 编写任务

  • 依赖于 Airflow 对象的一致行为

“公共接口”的一个方面是扩展或使用 Airflow Python 类和函数。下面提到的类和函数可以依赖于在 Airflow 的主要版本中保持向后兼容的签名和行为。另一方面,以 _ 开头的类和方法(也称为受保护的 Python 方法)和 __ 开头的类和方法(也称为私有的 Python 方法)不属于 Airflow 公共接口的一部分,并且可能会随时更改。

您还可以通过 稳定 REST API(基于 OpenAPI 规范)使用 Airflow 的公共接口。对于特定需求,您还可以使用 Airflow 命令行界面 (CLI),尽管其行为在细节上可能会发生变化(例如输出格式和可用标志),因此如果您想以编程方式依赖这些,建议使用稳定 REST API。

为 DAG 作者使用公共接口

DAG

DAG 是 Airflow 的核心实体,表示一个循环工作流。您可以通过在 DAG 文件中实例化 DAG 类来创建 DAG。您还可以通过 DagBag 类实例化它们,该类从文件或文件夹中读取 DAG。DAG 还可以通过 Param 类指定参数。

Airflow 有一组示例 DAG,您可以使用它们来学习如何编写 DAG

您可以在 DAG 中阅读有关 DAG 的更多信息。

DAG 中使用的模块的参考如下

DagRun 的属性也可以在 模板 等内容中引用。

操作器

基类 BaseOperatorBaseSensorOperator 是公共的,可以扩展以创建新的操作器。

在 Apache Airflow 中发布的 BaseOperator 的子类在*行为*上是公共的,但在*结构*上不是公共的。也就是说,操作器的参数和行为受语义版本控制,但方法可能会随时更改。

任务实例

任务实例是 DAG(在 DAG 运行中)中单个任务的单个运行。它们在通过 TaskInstance 类传递给操作器的 execute 方法的上下文中可用。

任务实例键

任务实例键是 DAG(在 DAG 运行中)中任务实例的唯一标识符。键是一个元组,由 dag_idtask_idrun_idtry_numbermap_index 组成。可以通过 key() 检索任务实例的键。

钩子

钩子是与外部平台和数据库的接口,在可能的情况下实现通用接口并充当操作器的构建块。所有钩子都派生自 BaseHook

Airflow 有一组被认为是公共的钩子。您可以通过扩展它们来自由扩展它们的功能

Airflow 公共实用程序

在编写或扩展钩子和操作器时,DAG 作者和开发人员可以使用以下类

  • Connection,它提供对外部服务凭据和配置的访问。

  • Variable,它提供对 Airflow 配置变量的访问。

  • XCom,用于访问任务间通信数据。

您可以在 管理连接变量XCom 中阅读有关 Airflow 公共实用程序的更多信息

用于实用程序的类的参考如下

公共异常

在编写自定义操作器和钩子时,您可以处理和引发 Airflow 公开的公共异常

公共实用程序类

使用公共接口扩展 Airflow 功能

Airflow 使用插件机制来扩展 Airflow 平台功能。它们允许扩展 Airflow UI,但它们也是公开以下自定义项(触发器、时间表、监听器等)的方式。提供程序还可以实现插件端点并自定义 Airflow UI 和自定义项。

您可以在插件中阅读有关插件的更多信息。您可以在从 Airflow Web 界面自定义 Apache 视图中阅读如何扩展 Airflow 界面。请注意,界面有一些简单的自定义不需要插件 - 您可以在自定义界面中阅读有关它们的更多信息。

以下是插件可用于扩展 Airflow 的方法

触发器

Airflow 使用触发器来实现与 asyncio 兼容的可延迟运算符。所有触发器都派生自 BaseTrigger

Airflow 有一组被认为是公共的触发器。您可以通过扩展它们来自定义其功能

您可以在可延迟运算符和触发器中阅读有关触发器的更多信息。

时间表

自定义时间表实现为 Airflow 的调度程序提供了额外的逻辑,以使用内置调度表达式无法实现的方式调度 DAG 运行。所有时间表都派生自 Timetable

Airflow 有一组被认为是公共的时间表。您可以通过扩展它们来自定义其功能

您可以在使用时间表自定义 DAG 调度中阅读有关时间表的更多信息。

监听器

监听器使您能够响应 DAG/任务生命周期事件。

这是通过 ListenerManager 类实现的,该类提供了可以实现以响应 DAG/任务生命周期事件的钩子。

2.5 版中的新功能: 监听器公共接口已在 2.5 版中添加。

您可以在监听器中阅读有关监听器的更多信息。

使用公共接口与外部服务和应用程序集成

Airflow 中的任务可以通过钩子和运算符来编排外部服务。Airflow 的核心功能(例如身份验证)也可以扩展以利用外部服务。您可以在提供程序包提供程序包中阅读有关它们可以提供的核心扩展的更多信息。

执行器

执行器是任务实例运行的机制。所有执行器都派生自 BaseExecutor。Airflow 中内置了几种执行器实现,每种都有其独特的特性和功能。

执行器接口本身(BaseExecutor 类)是公共的,但内置执行器不是(即 KubernetesExecutor、LocalExecutor 等)。这意味着,以 KubernetesExecutor 为例,我们可能会在 Airflow 次要版本或补丁版本中对其进行更改,这可能会破坏继承自 KubernetesExecutor 的执行器。这是必要的,以便让 Airflow 开发人员有足够的自由来继续改进我们提供的执行器。因此,如果您想修改或扩展内置执行器,您应该将完整的执行器代码合并到您的项目中,这样这些更改就不会破坏您的派生执行器。

您可以在执行器中阅读有关执行器以及如何编写自己的执行器的更多信息。

2.6 版中的新功能: 执行器接口在 Airflow 中已经存在很长时间了,但在 2.6 版之前,代码库中的其他地方有特定于执行器的代码。从 2.6 版开始,执行器是完全解耦的,这意味着 Airflow 核心不再需要知道特定执行器的行为。您可以在 Airflow 2.6 之前成功实现自定义执行器,并且许多人做到了,但是有一些硬编码的行为更喜欢内置执行器,并且自定义执行器无法提供内置执行器具有的完整功能。

密钥后端

可以将 Airflow 配置为依赖密钥后端来检索 ConnectionVariable。所有密钥后端都派生自 BaseSecretsBackend

所有密钥后端实现都是公共的。您可以扩展它们的功能

您可以在密钥后端中阅读有关密钥后端的更多信息。您还可以在密钥后端中找到社区提供程序中实现的所有可用密钥后端。

身份验证管理器

身份验证管理器负责 Airflow 中的用户身份验证和用户授权。所有身份验证管理器都派生自 BaseAuthManager

身份验证管理器接口本身(BaseAuthManager 类)是公共的,但身份验证管理器的不同实现不是(即 FabAuthManager)。

您可以在身份验证管理器中阅读有关身份验证管理器以及如何编写自己的身份验证管理器的更多信息。

身份验证后端

身份验证后端可以扩展 Airflow 身份验证机制的工作方式。您可以在身份验证后端中找到有关身份验证的更多信息,该文档还显示了社区提供程序中实现的可用身份验证后端。如果身份验证后端是在提供程序中实现的,则它是提供程序公共接口的一部分,而不是 Airflow 的一部分。

连接

创建钩子时,您可以添加自定义连接。您可以在连接中阅读有关社区提供程序中实现的可用连接的更多信息。

额外链接

创建钩子时,您可以添加自定义额外链接,这些链接在运行任务时显示。您可以在额外链接中找到有关额外链接的更多信息,该文档还显示了社区提供程序中实现的可用额外链接。

日志记录和监控

您可以扩展 Airflow 写入日志的方式。您可以在日志记录和监控中找到有关日志写入的更多信息。

写入日志还显示了社区提供程序中实现的可用日志写入器。

装饰器

DAG 作者可以使用装饰器来使用 TaskFlow 概念创作 DAG。所有装饰器都派生自 TaskDecorator

Airflow 有一组被认为是公共的装饰器。您可以通过扩展它们来自定义其功能

您可以在创建自定义 @task 装饰器中阅读有关创建自定义装饰器的更多信息。

电子邮件通知

Airflow 有一种内置的发送电子邮件通知的方式,它允许通过添加自定义电子邮件通知类来扩展它。您可以在电子邮件配置中阅读有关电子邮件通知的更多信息。

通知

Airflow 有一种内置的可扩展方式,可以使用各种 on_*_callback 发送通知。您可以在创建通知程序中阅读有关通知的更多信息。

集群策略

集群策略是一种将集群范围的策略动态应用于正在解析的 DAG 或正在执行的任务的方法。您可以在集群策略中阅读有关集群策略的更多信息。

血缘

Airflow 可以帮助跟踪数据的来源、发生的情况以及随时间推移的移动位置。您可以在血缘中阅读有关血缘的更多信息。

什么不是 Apache Airflow 公共接口的一部分?

本文档中未提及的所有内容均应视为非公共接口。

有时在其他应用程序中,可以依赖这些组件来保持向后兼容性,但在 Airflow 中,它们不是公共接口的一部分,并且可能会随时更改

  • 数据库结构被视为内部实现细节,您不应假设该结构将以向后兼容的方式维护。

  • Web 界面在不断发展,HTML 元素没有向后兼容性保证。

  • 除本文档中明确提及的 Python 类外,其他 Python 类均被视为内部实现细节,您不应假设它们将以向后兼容的方式维护。

此条目对您有帮助吗?