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 作者使用公開介面

DAGs

DAG 是 Airflow 的核心實體,代表一個週期性的工作流程。您可以透過在 DAG 檔案中實例化 DAG 類別來建立 DAG。您也可以透過 DagBag 類別來實例化它們,該類別從檔案或資料夾讀取 DAG。DAG 也可以透過 Param 類別指定參數。

Airflow 有一組範例 DAG,您可以使用它們來學習如何撰寫 DAG

您可以在 DAGs 中閱讀更多關於 DAG 的資訊。

DAG 中使用的模組的參考文獻在此

DagRun 的屬性也可以在 範本 等事物中引用。

Operators (運算子)

基礎類別 BaseOperatorBaseSensorOperator 是公開的,可以擴展以建立新的運算子。

在 Apache Airflow 中發布的 BaseOperator 的子類別在行為上是公開的,但在結構上不是。也就是說,運算子的參數和行為受語義化版本控制約束,但方法可能會隨時變更。

Task Instances (任務實例)

任務實例是 DAG 中單個任務的個別執行(在 DAG 執行中)。它們在透過 TaskInstance 類別傳遞到運算子執行方法的上下文中可用。

Task Instance Keys (任務實例鍵)

任務實例鍵是 DAG 中任務實例的唯一識別符(在 DAG 執行中)。鍵是一個元組,由 dag_idtask_idrun_idtry_numbermap_index 組成。任務實例的鍵可以透過 key() 檢索。

Hooks (鉤子)

鉤子是外部平台和資料庫的介面,在可能的情況下實作通用介面,並充當運算子的建構區塊。所有鉤子都衍生自 BaseHook

Airflow 有一組被認為是公開的鉤子。您可以透過擴展它們來自由擴展它們的功能

公開 Airflow 工具

在撰寫或擴展鉤子和運算子時,DAG 作者和開發人員可以使用以下類別

  • Connection,它提供對外部服務憑證和組態的存取權。

  • Variable,它提供對 Airflow 組態變數的存取權。

  • XCom,用於存取任務間通訊資料。

您可以在 管理連線變數XComs 中閱讀更多關於公開 Airflow 工具的資訊

用於工具的類別的參考文獻在此

公開例外

在撰寫自訂運算子和鉤子時,您可以處理和引發 Airflow 公開的公開例外

公開工具類別

使用公開介面擴展 Airflow 功能

Airflow 使用外掛程式機制來擴展 Airflow 平台功能。它們允許擴展 Airflow UI,但它們也是公開以下自訂項的方式(觸發器、時間表、監聽器等)。提供者也可以實作外掛程式端點並自訂 Airflow UI 和自訂項。

您可以在 外掛程式 中閱讀更多關於外掛程式的資訊。您可以在 自訂 Airflow Web UI 中的 Apache 檢視 中閱讀如何擴展 Airflow UI。請注意,對 UI 進行一些簡單的自訂不需要外掛程式 - 您可以在 自訂 UI 中閱讀更多關於它們的資訊。

以下是外掛程式可用於擴展 Airflow 的方式

Triggers (觸發器)

Airflow 使用觸發器來實作與 asyncio 相容的可延遲運算子。所有觸發器都衍生自 BaseTrigger

Airflow 有一組被認為是公開的觸發器。您可以透過擴展它們來自由擴展它們的功能

您可以在 可延遲運算子和觸發器 中閱讀更多關於觸發器的資訊。

Timetables (時間表)

自訂時間表實作為 Airflow 的排程器提供額外的邏輯,以使用內建排程表達式無法實現的方式排程 DAG 執行。所有時間表都衍生自 Timetable

Airflow 有一組被認為是公開的時間表。您可以透過擴展它們來自由擴展它們的功能

您可以在 使用時間表自訂 DAG 排程 中閱讀更多關於時間表的資訊。

Listeners (監聽器)

監聽器使您能夠回應 DAG/任務生命週期事件。

這是透過 ListenerManager 類別實作的,該類別提供可以實作以回應 DAG/任務生命週期事件的鉤子。

2.5 版本新增: 監聽器公開介面已在 2.5 版本中新增。

您可以在 監聽器 中閱讀更多關於監聽器的資訊。

使用公開介面與外部服務和應用程式整合

Airflow 中的任務可以透過鉤子和運算子協調外部服務。Airflow 的核心功能(例如身份驗證)也可以擴展以利用外部服務。您可以在 提供者套件提供者套件 中閱讀更多關於提供者 提供者套件 和它們可以提供的核心擴展的資訊。

Executors (執行器)

執行器是任務實例執行的機制。所有執行器都衍生自 BaseExecutor。Airflow 中內建了幾種執行器實作,每種實作都有其獨特的特性和功能。

執行器介面本身(BaseExecutor 類別)是公開的,但內建執行器不是(即 KubernetesExecutor、LocalExecutor 等)。這表示,以 KubernetesExecutor 為例,我們可能會在次要或修補程式 Airflow 版本中對 KubernetesExecutor 進行變更,這可能會破壞 KubernetesExecutor 的子類別執行器。這是必要的,以便 Airflow 開發人員有足夠的自由來繼續改進我們提供的執行器。因此,如果您想修改或擴展內建執行器,您應該將完整的執行器程式碼納入您的專案中,以便此類變更不會破壞您的衍生執行器。

您可以在 執行器 中閱讀更多關於執行器以及如何撰寫自己的執行器的資訊。

2.6 版本新增: 執行器介面在 Airflow 中已存在相當長一段時間,但在 2.6 之前,程式碼庫的其他地方存在特定於執行器的程式碼。從 2.6 版本開始,執行器已完全解耦,因為 Airflow 核心不再需要了解特定執行器的行為。您可能在 Airflow 2.6 之前成功實作了自訂執行器,並且許多人這樣做了,但有些硬式編碼行為偏好內建執行器,並且自訂執行器無法提供內建執行器所擁有的完整功能。

Secrets Backends (密鑰後端)

Airflow 可以設定為依賴密鑰後端來檢索 ConnectionVariable。所有密鑰後端都衍生自 BaseSecretsBackend

所有密鑰後端實作都是公開的。您可以擴展它們的功能

您可以在 密鑰後端 中閱讀更多關於密鑰後端的資訊。您也可以在 密鑰後端 中找到社群提供者中實作的所有可用密鑰後端。

Auth managers (身份驗證管理器)

身份驗證管理器負責 Airflow 中的使用者身份驗證和使用者授權。所有身份驗證管理器都衍生自 BaseAuthManager

身份驗證管理器介面本身(BaseAuthManager 類別)是公開的,但身份驗證管理器的不同實作不是(即 FabAuthManager)。

您可以在 身份驗證管理器 中閱讀更多關於身份驗證管理器以及如何撰寫自己的身份驗證管理器的資訊。

Authentication Backends (身份驗證後端)

身份驗證後端可以擴展 Airflow 身份驗證機制的運作方式。您可以在 身份驗證後端 中找到更多關於身份驗證的資訊,該資訊也顯示了社群提供者中實作的可用身份驗證後端。如果身份驗證後端在提供者中實作,則它是提供者的公開介面的一部分,而不是 Airflow 的一部分。

Connections (連線)

在建立鉤子時,您可以新增自訂連線。您可以在 連線 中閱讀更多關於連線的資訊,以了解社群提供者中實作的可用連線。

Extra Links (額外連結)

在建立鉤子時,您可以新增自訂額外連結,這些連結會在任務執行時顯示。您可以在 額外連結 中找到更多關於額外連結的資訊,該資訊也顯示了社群提供者中實作的可用額外連結。

Logging and Monitoring (日誌記錄與監控)

您可以擴展 Airflow 寫入日誌的方式。您可以在 日誌記錄與監控 中找到更多關於日誌寫入的資訊。

寫入日誌 也顯示了社群提供者中實作的可用日誌寫入器。

Decorators (裝飾器)

DAG 作者可以使用裝飾器,使用 TaskFlow 概念撰寫 DAG。所有裝飾器都衍生自 TaskDecorator

Airflow 有一組被認為是公開的裝飾器。您可以透過擴展它們來自由擴展它們的功能

您可以在 建立自訂 @task 裝飾器 中閱讀更多關於建立自訂裝飾器的資訊。

Email notifications (電子郵件通知)

Airflow 具有內建的電子郵件通知發送方式,並允許透過新增自訂電子郵件通知類別來擴展它。您可以在 電子郵件組態 中閱讀更多關於電子郵件通知的資訊。

Notifications (通知)

Airflow 具有內建的可擴展方式,可以使用各種 on_*_callback 發送通知。您可以在 建立通知器 中閱讀更多關於通知的資訊。

Cluster Policies (叢集政策)

叢集政策是一種將叢集範圍的政策動態應用於正在解析的 DAG 或正在執行的任務的方法。您可以在 叢集政策 中閱讀更多關於叢集政策的資訊。

Lineage (血緣)

Airflow 可以協助追蹤資料的來源、資料發生的情況以及資料隨時間的移動位置。您可以在 血緣 中閱讀更多關於血緣的資訊。

Apache Airflow 公開介面不包含哪些內容?

本文件中未提及的所有內容都應視為非公開介面。

有時在其他應用程式中,這些組件可以依賴於保持向後相容性,但在 Airflow 中,它們不是公開介面的一部分,並且可能隨時變更

  • 資料庫結構 被視為內部實作細節,您不應假設該結構將以向後相容的方式維護。

  • Web UI 不斷發展,並且 HTML 元素沒有向後相容性保證。

  • 除了本文中明確提及的 Python 類別外,Python 類別都被視為內部實作細節,您不應假設它們將以向後相容的方式維護。

此條目是否有幫助?