Airflow 的公共接口¶
Apache Airflow 的公共接口是 Apache Airflow 中接口和行为的集合,其更改受语义版本控制的约束。用户通过创建和管理 DAG、管理任务和依赖项,以及通过编写新的执行器、插件、操作符和提供程序来扩展 Airflow 功能,与 Airflow 的公共接口进行交互。公共接口对于构建自定义工具和与其他系统的集成,以及自动化 Airflow 工作流程的某些方面非常有用。
使用 Airflow 公共接口¶
以下是 Airflow 公共接口的一些示例
当您编写自己的操作符或钩子时。当您的用例不存在钩子或操作符,或者当存在一个但您需要自定义行为时,通常会这样做。
当编写新的 插件 时,这些插件将 Airflow 的功能扩展到 DAG 构建块之外。密钥、时间表、触发器、监听器都是此类功能的示例。这通常由管理 Airflow 实例的用户完成。
捆绑自定义操作符、钩子、插件并通过 提供程序软件包 一起发布它们 - 这通常由那些打算为 Airflow 集成的外部服务或应用程序提供可重用功能集的人员完成。
使用 taskflow 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 中使用的模块的参考在这里
操作符¶
基类 BaseOperator
和 BaseSensorOperator
是公共的,可以扩展以创建新的操作符。
在 Apache Airflow 中发布的 BaseOperator 的子类在行为上是公共的,但在结构上不是。也就是说,操作符的参数和行为受 semver 管辖,但方法可能会随时更改。
任务实例¶
任务实例是 DAG 中单个任务(在 DAG 运行中)的单独运行。它们在通过 TaskInstance
类传递给操作符执行方法的上下文中可用。
任务实例键¶
任务实例键是 DAG 中任务实例(在 DAG 运行中)的唯一标识符。键是一个元组,由 dag_id
、task_id
、run_id
、try_number
和 map_index
组成。可以通过 key()
检索任务实例的键。
公共 Airflow 实用程序¶
在编写或扩展钩子和操作符时,DAG 作者和开发人员可以使用以下类
Connection
,它提供对外部服务凭据和配置的访问。Variable
,它提供对 Airflow 配置变量的访问。XCom
,它用于访问任务间通信数据。
您可以在 管理连接、变量、XCom 中阅读更多关于公共 Airflow 实用程序的信息
用于实用程序的类的参考在这里
公共实用程序类¶
使用公共接口扩展 Airflow 功能¶
Airflow 使用插件机制来扩展 Airflow 平台功能。它们允许扩展 Airflow UI,但它们也是公开以下自定义项(触发器、时间表、监听器等)的方式。提供程序还可以实现插件端点并自定义 Airflow UI 和自定义项。
您可以在插件中了解更多关于插件的信息。您可以在从 Airflow Web UI 自定义 Apache 视图中了解如何扩展 Airflow UI。请注意,有一些简单的 UI 自定义不需要插件 - 您可以在自定义 UI中了解更多相关信息。
以下是插件可以用来扩展 Airflow 的方法:
触发器¶
Airflow 使用触发器来实现与 asyncio
兼容的可延迟操作符。所有触发器都派生自 BaseTrigger
。
Airflow 有一组被认为是公共的触发器。您可以自由地通过扩展它们来扩展其功能。
您可以在可延迟操作符 & 触发器中了解更多关于触发器的信息。
时间表¶
自定义时间表实现为 Airflow 的调度器提供了额外的逻辑,以便以内置调度表达式无法实现的方式调度 DAG 运行。所有时间表都派生自 Timetable
。
Airflow 有一组被认为是公共的时间表。您可以自由地通过扩展它们来扩展其功能。
您可以在使用时间表自定义 DAG 调度中了解更多关于时间表的信息。
监听器¶
监听器使您能够响应 DAG/任务生命周期事件。
这是通过 ListenerManager
类实现的,该类提供了可以实现以响应 DAG/任务生命周期事件的钩子。
2.5 版本新增: 监听器公共接口已在 2.5 版本中添加。
您可以在监听器中了解更多关于监听器的信息。
额外链接¶
额外链接是可以独立于自定义操作符添加到 Airflow 的动态链接。通常,它们可以由操作符定义,但插件允许您在全局级别覆盖这些链接。
您可以在定义操作符的额外链接中了解更多关于额外链接的信息。
使用公共接口与外部服务和应用程序集成¶
Airflow 中的任务可以通过钩子和操作符来协调外部服务。Airflow 的核心功能(如身份验证)也可以扩展以利用外部服务。您可以在提供程序包和提供程序包中了解更多关于提供程序以及它们可以提供的核心扩展的信息。
执行器¶
执行器是任务实例运行的机制。所有执行器都派生自 BaseExecutor
。Airflow 中内置了多个执行器实现,每个执行器都有其独特的特性和功能。
执行器接口本身(BaseExecutor 类)是公共的,但内置执行器不是(即 KubernetesExecutor、LocalExecutor 等)。这意味着,以 KubernetesExecutor 为例,我们可能会在 Airflow 的次要或补丁版本中对 KubernetesExecutor 进行更改,这可能会破坏继承自 KubernetesExecutor 的执行器。这是必要的,以便让 Airflow 开发人员有足够的自由来继续改进我们提供的执行器。因此,如果您想修改或扩展内置执行器,您应该将完整的执行器代码合并到您的项目中,以便这些更改不会破坏您的派生执行器。
您可以在执行器中了解更多关于执行器以及如何编写自己的执行器的信息。
2.6 版本新增: 执行器接口在 Airflow 中已经存在相当一段时间了,但在 2.6 之前,代码库的其他地方存在特定于执行器的代码。从 2.6 版本开始,执行器已完全解耦,这意味着 Airflow 核心不再需要了解特定执行器的行为。您可能在 Airflow 2.6 之前成功实现了自定义执行器,并且很多人都这样做了,但有一些硬编码的行为更喜欢内置执行器,并且自定义执行器无法提供内置执行器所拥有的全部功能。
密钥后端¶
可以将 Airflow 配置为依赖密钥后端来检索 Connection
和 Variable
。所有密钥后端都派生自 BaseSecretsBackend
。
所有密钥后端实现都是公共的。您可以扩展其功能。
身份验证管理器¶
身份验证管理器负责 Airflow 中的用户身份验证和用户授权。所有身份验证管理器都派生自 BaseAuthManager
。
身份验证管理器接口本身(BaseAuthManager
类)是公共的,但身份验证管理器的不同实现不是(即 FabAuthManager)。
您可以在身份验证管理器中了解更多关于身份验证管理器以及如何编写自己的身份验证管理器的信息。
身份验证后端¶
身份验证后端可以扩展 Airflow 身份验证机制的工作方式。您可以在身份验证后端中了解更多关于身份验证的信息,该链接还显示了在社区提供程序中实现的可用身份验证后端。如果身份验证后端在提供程序中实现,则它是提供程序公共接口的一部分,而不是 Airflow 的一部分。
装饰器¶
DAG 作者可以使用装饰器,使用 TaskFlow 概念来编写 DAG。所有装饰器都派生自 TaskDecorator
。
Airflow 有一组被认为是公共的装饰器。您可以自由地通过扩展它们来扩展其功能。
您可以在创建自定义 @task 装饰器中了解更多关于创建自定义装饰器的信息。