Airflow的公共接口

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

使用Airflow公共接口

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

  • 当您编写自己的操作符或钩子时。这通常在您的用例没有现成的钩子或操作符时进行,或者当存在但您需要自定义其行为时。

  • 在编写新的插件来扩展Airflow功能(超越DAG构建模块)时。Secrets(密钥)、Timetables(时间表)、Triggers(触发器)、Listeners(监听器)都是此类功能的示例。这通常由管理Airflow实例的用户完成。

  • 将自定义的Operator、Hook、Plugin打包,并通过provider packages统一发布 - 这通常由那些希望为Airflow集成的外部服务或应用程序提供可复用功能集的开发者完成。

  • 使用任务流API编写任务

  • 依赖Airflow对象的一致行为

"公共接口"的一个方面是扩展或使用Airflow Python类和函数。以下提到的类和函数可以保证在Airflow的主版本中保持向后兼容的签名和行为。另一方面,以_(也称为受保护的Python方法)和__(也称为私有Python方法)开头的类和方法不属于Airflow公共接口,可能随时会发生变化。

您也可以通过Stable REST API(基于OpenAPI规范)使用Airflow的公共接口。对于特定需求,您也可以使用Airflow Command Line Interface (CLI),但其行为细节(如输出格式和可用标志)可能会发生变化,因此如果您希望以编程方式依赖这些功能,建议使用Stable REST API。

为DAG作者使用公共接口

DAGs

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

Airflow 提供了一系列示例 DAG,您可以通过这些示例学习如何编写 DAG

你可以在DAGs中了解更多关于DAGs的内容。

DAG中使用的模块参考文档如下:

DagRun 的属性也可以在 Templates 等地方被引用。

操作符

基类 BaseOperatorBaseSensorOperator 是公开的,可以被扩展以创建新的操作符。

Apache Airflow中发布的BaseOperator子类在行为上是公开的,但在结构上不是。也就是说,Operator的参数和行为遵循语义化版本控制,但其方法可能随时变更。

任务实例

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

任务实例键

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

钩子(Hooks)

Hooks是与外部平台和数据库交互的接口,尽可能实现通用接口并作为操作器的构建模块。所有hooks都继承自BaseHook

Airflow 提供了一系列被视为公开的 Hook(钩子)。您可以通过扩展它们来自由增强其功能:

Airflow 公共实用工具

在编写或扩展Hooks和Operators时,DAG作者和开发者可以使用以下类:

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

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

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

您可以了解更多关于Airflow公共工具的信息,请参阅管理连接变量XComs

实用工具类的参考文档在此:

公共异常

在编写自定义Operators和Hooks时,您可以处理和抛出Airflow暴露的公共Exceptions:

公共实用工具类

使用公共接口扩展Airflow功能

Airflow 使用插件机制来扩展平台功能。它们不仅可以扩展Airflow用户界面,还是暴露以下自定义功能(触发器、时间表、监听器等)的途径。提供商也可以实现插件端点并自定义Airflow用户界面及其定制化功能。

您可以在插件中了解更多关于插件的信息。您可以在从Airflow网页界面自定义Apache视图中了解如何扩展Airflow UI。请注意,有一些简单的UI定制不需要插件 - 您可以在自定义UI中了解更多相关信息。

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

触发器

Airflow 使用触发器来实现与 asyncio 兼容的可延迟操作符。 所有触发器都继承自 BaseTrigger

Airflow 拥有一组被视为公开的触发器。您可以通过扩展它们来自由扩展其功能:

你可以在可延迟操作符与触发器中了解更多关于触发器的信息。

时间表

自定义时间表实现为Airflow的调度器提供了额外的逻辑,以内置调度表达式无法实现的方式安排DAG运行。所有时间表都继承自Timetable

Airflow 拥有一组被视为公开的时间表。您可以通过扩展它们来自由扩展其功能:

你可以在使用时间表自定义DAG调度中了解更多关于时间表的内容。

监听器

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

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

在版本2.5中新增:Listener公共接口已在版本2.5中添加。

你可以在监听器中了解更多关于监听器的信息。

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

Airflow中的任务可以通过Hooks和Operators编排外部服务。Airflow的核心功能(如身份验证)也可以扩展以利用外部服务。 您可以阅读更多关于provider packages以及它们在provider packages中能提供的核心扩展功能。

执行器

执行器是任务实例运行的机制。所有执行器都继承自BaseExecutor。Airflow内置了多种执行器实现,每种都具有独特的特性和功能。

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

您可以阅读更多关于执行器以及如何编写自定义执行器的内容,请参阅Executor

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

密钥后端

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

所有Secrets Backend的实现都是公开的。您可以扩展它们的功能:

你可以在Secrets Backend中了解更多关于Secret Backends的信息。 你也可以在社区提供者实现的所有可用Secrets Backends中找到Secret backends

认证管理器

认证管理器负责在Airflow中处理用户认证和授权。所有认证管理器都继承自BaseAuthManager

认证管理器接口本身(BaseAuthManager类)是公开的,但不同的认证管理器实现(如FabAuthManager)则不是公开的。

您可以阅读更多关于认证管理器的信息以及如何编写自己的认证管理器,请参阅Auth manager

认证后端

认证后端可以扩展Airflow认证机制的工作方式。您可以在认证后端中了解更多关于认证的信息,其中还展示了社区提供者实现的可用认证后端。对于提供者实现的认证后端,它属于该提供者的公共接口而非Airflow的。

连接

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

额外链接

创建Hooks时,您可以添加自定义额外链接,这些链接会在任务运行时显示。 您可以在额外链接中了解更多关于额外链接的信息, 该文档还展示了社区提供者已实现的可用额外链接。

日志记录与监控

您可以扩展Airflow写入日志的方式。您可以在日志记录与监控中了解更多关于日志写入的信息。

写入日志 同时也展示了社区提供商已实现的可用日志写入器。

装饰器

DAG作者可以使用装饰器基于TaskFlow概念来编写DAG。 所有装饰器都继承自TaskDecorator

Airflow 提供了一套被视为公开的装饰器。您可以通过扩展它们来自由扩展其功能:

你可以在创建自定义@task装饰器中了解更多关于创建自定义装饰器的内容。

邮件通知

Airflow内置了发送邮件通知的功能,并允许通过添加自定义邮件通知类来扩展该功能。您可以在邮件配置中了解更多关于邮件通知的信息。

通知

Airflow内置了一种可扩展的通知发送方式,通过使用各种on_*_callback回调函数。您可以在创建通知器中了解更多关于通知的信息。

集群策略

集群策略是一种动态应用集群范围策略的方式,针对正在解析的DAG或正在执行的任务。您可以在集群策略中了解更多关于集群策略的信息。

数据血缘关系

Airflow可以帮助追踪数据的来源、处理过程以及随时间变化的流转路径。您可以在Lineage中了解更多关于数据血缘的信息。

Apache Airflow 的公共接口不包括哪些部分?

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

有时在其他应用程序中,这些组件可能依赖保持向后兼容性, 但在Airflow中它们不属于公共接口部分,可能随时变更:

  • Database structure 被视为内部实现细节,您不应假设其结构会保持向后兼容。

  • Web UI is continuously evolving and there are no backwards compatibility guarantees on HTML elements.

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

这篇内容对您有帮助吗?