什麼是 Airflow®?

Apache Airflow® 是一個開源平台,用於開發、排程和監控批次導向的工作流程。Airflow 可擴展的 Python 框架使您能夠建構與幾乎任何技術連接的工作流程。Web 介面有助於管理您的工作流程狀態。Airflow 可以通過多種方式部署,從筆記型電腦上的單個進程到支援最大型工作流程的分散式設定。

工作流程即程式碼

Airflow 工作流程的主要特點是所有工作流程都在 Python 程式碼中定義。「工作流程即程式碼」有以下幾個目的

  • 動態性:Airflow 管線配置為 Python 程式碼,允許動態管線生成。

  • 可擴展性:Airflow® 框架包含用於連接多種技術的運算子。所有 Airflow 組件都是可擴展的,可以輕鬆調整以適應您的環境。

  • 彈性:工作流程參數化是內建的,利用 Jinja 範本引擎。

看看以下程式碼片段

from datetime import datetime

from airflow import DAG
from airflow.decorators import task
from airflow.operators.bash import BashOperator

# A DAG represents a workflow, a collection of tasks
with DAG(dag_id="demo", start_date=datetime(2022, 1, 1), schedule="0 0 * * *") as dag:
    # Tasks are represented as operators
    hello = BashOperator(task_id="hello", bash_command="echo hello")

    @task()
    def airflow():
        print("airflow")

    # Set dependencies between tasks
    hello >> airflow()

在這裡您看到

  • 一個名為「demo」的 DAG,從 2022 年 1 月 1 日開始,每天運行一次。DAG 是 Airflow 對工作流程的表示。

  • 兩個任務,一個運行 Bash 腳本的 BashOperator 和一個使用 @task 裝飾器定義的 Python 函數

  • >> 任務之間定義了依賴關係,並控制任務的執行順序

Airflow 評估此腳本並在設定的時間間隔和定義的順序執行任務。「demo」DAG 的狀態在 Web 介面中可見

Demo DAG in the Graph View, showing the status of one DAG run

此範例示範了簡單的 Bash 和 Python 腳本,但這些任務可以運行任何任意程式碼。想想運行 Spark 作業、在兩個儲存桶之間移動資料或發送電子郵件。相同的結構也可以在時間推移中看到運行

Demo DAG in the Grid View, showing the status of all DAG runs

每欄代表一個 DAG 運行。這些是 Airflow 中最常用的兩個視圖,但還有其他幾個視圖可讓您深入了解工作流程的狀態。

為什麼選擇 Airflow®?

Airflow® 是一個批次工作流程協調平台。Airflow 框架包含用於連接多種技術的運算子,並且易於擴展以連接新技術。如果您的工作流程具有明確的開始和結束,並且以固定的時間間隔運行,則可以將它們程式設計為 Airflow DAG。

如果您喜歡程式碼勝過點擊,那麼 Airflow 就是適合您的工具。工作流程定義為 Python 程式碼,這意味著

  • 工作流程可以儲存在版本控制中,以便您可以回滾到以前的版本

  • 工作流程可以由多人同時開發

  • 可以編寫測試來驗證功能

  • 組件是可擴展的,您可以基於廣泛的現有組件進行建構

豐富的排程和執行語義使您能夠輕鬆定義複雜的管線,以固定的時間間隔運行。回填允許您在更改邏輯後在歷史資料上(重新)運行管線。並且在解決錯誤後重新運行部分管線的能力有助於最大限度地提高效率。

Airflow 的使用者介面提供

  1. 兩個事物的深入視圖

  1. 管線

  2. 任務

  1. 管線隨時間的概觀

從介面,您可以檢查日誌並管理任務,例如在失敗時重試任務。

Airflow 的開源性質確保您使用由世界各地許多其他 公司 開發、測試和使用的組件。在活躍的 社群 中,您可以找到大量有用的資源,例如部落格文章、文章、會議、書籍等等。您可以通過多個管道與其他同儕聯繫,例如 Slack 和郵件列表。

Airflow 作為一個平台具有高度可自訂性。通過利用 Airflow 的公共介面,您可以擴展和自訂 Airflow 的幾乎每個方面。

為什麼不選擇 Airflow®?

Airflow® 是為有限的批次工作流程而建構的。雖然 CLI 和 REST API 允許觸發工作流程,但 Airflow 並非為無限運行的事件驅動工作流程而建構。Airflow 不是串流解決方案。然而,諸如 Apache Kafka 之類的串流系統通常與 Apache Airflow 一起使用。Kafka 可用於即時的攝取和處理,事件資料被寫入儲存位置,而 Airflow 定期啟動處理一批資料的工作流程。

如果您喜歡點擊勝過程式碼,那麼 Airflow 可能不是正確的解決方案。Web 介面旨在使管理工作流程盡可能容易,並且 Airflow 框架不斷改進,以使開發人員體驗盡可能順暢。然而,Airflow 的理念是將工作流程定義為程式碼,因此始終需要程式碼。

此條目是否有幫助?