Airflow Summit 2025 將於 10 月 07-09 日舉行。立即註冊以獲得早鳥票!

什麼是 Airflow®?

Apache Airflow® 是一個開源平臺,用於開發、排程和監控批處理工作流。Airflow 可擴充套件的 Python 框架使您能夠構建連線幾乎任何技術的工作流。基於 Web 的使用者介面可幫助您視覺化、管理和除錯工作流。您可以執行 Airflow 的多種配置—從筆記型電腦上的單個程序到能夠處理海量工作負載的分散式系統。

工作流即程式碼

Airflow 工作流完全在 Python 中定義。這種“工作流即程式碼”的方法帶來了幾個優勢

  • 動態性:流水線在程式碼中定義,可以動態生成 DAG 並進行引數化。

  • 可擴充套件性:Airflow 框架包含廣泛的內建 operators,並且可以根據您的需求進行擴充套件。

  • 靈活性:Airflow 利用 Jinja 模板引擎,允許進行豐富的自定義。

DAG

DAG 是一個模型,它封裝了執行工作流所需的一切。一些 DAG 屬性包括以下內容

  • 排程:工作流應何時執行。

  • 任務任務 是在 worker 上執行的離散工作單元。

  • 任務依賴任務 執行的順序和條件。

  • 回撥:當整個工作流完成時要採取的操作。

  • 附加引數:以及許多其他操作細節。

讓我們來看一個定義簡單 DAG 的程式碼片段

from datetime import datetime

from airflow.sdk import DAG, task
from airflow.providers.standard.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 表示工作流的方式。

  • 兩個任務:一個使用 BashOperator 執行 shell 指令碼,另一個使用 @task 裝飾器定義 Python 函式。

  • >> 運算子定義了兩個任務之間的依賴關係,並控制執行順序。

Airflow 解析指令碼,排程任務,並按定義的順序執行它們。"demo" DAG 的狀態顯示在 Web 介面中

Demo DAG in the Graph View, showing the status of one DAG run along with DAG code.

此示例使用簡單的 Bash 命令和 Python 函式,但 Airflow 任務幾乎可以執行任何程式碼。您可以使用任務來執行 Spark 作業、在儲存桶之間移動檔案或傳送通知電子郵件。這是同一 DAG 隨時間變化的的樣子,包含多次執行

Demo DAG in the Grid View, showing the status of all DAG runs, as well as logs for a task instance

網格中的每一列代表一次 DAG 執行。雖然圖檢視和網格檢視最常使用,但 Airflow 提供了幾種其他檢視來幫助您監控和排除工作流故障—例如 DAG 概覽 檢視

Overview of a complex DAG in the Grid View, showing the status of all DAG runs, as well as quick links to recently failed task logs

注意

術語“DAG”源自數學概念“有向無環圖”(directed acyclic graph),但在 Airflow 中的含義已經遠遠超出了僅與數學 DAG 概念相關的字面資料結構。

為什麼選擇 Airflow®?

Airflow 是一個用於編排批處理工作流的平臺。它提供了一個靈活的框架,包含廣泛的內建 operators,並且易於與新技術整合。

如果您的工作流有明確的開始和結束,並且按計劃執行,那麼它們非常適合 Airflow DAG。

如果您更喜歡透過程式碼而不是點選來工作,Airflow 就是為您而設計的。將工作流定義為 Python 程式碼提供了幾個關鍵優勢

  • 版本控制:跟蹤變更、回滾到先前版本,並與您的團隊協作。

  • 團隊協作:多個開發者可以處理同一個工作流程式碼庫。

  • 測試:透過單元測試和整合測試驗證流水線邏輯。

  • 可擴充套件性:使用龐大的現有元件生態系統來自定義工作流—或構建您自己的元件。

Airflow 豐富的排程和執行語義使其易於定義複雜、週期性的流水線。從 Web 介面,您可以手動觸發 DAG、檢查日誌和監控任務狀態。您還可以回填 DAG 執行以處理歷史資料,或僅重新執行失敗的任務以最大限度地降低成本和時間。

Airflow 平臺高度可定製。使用Airflow 公共介面,您可以擴充套件和調整系統的幾乎每個部分—從 operators 到 UI 外掛再到執行邏輯。

因為 Airflow 是開源的,所以您正在基於由全球社群開發、測試和維護的元件進行構建。您會找到豐富的學習資源,包括博文、書籍和會議演講—並且您可以透過社群Slack 和郵件列表與其他人聯絡。

為什麼不選擇 Airflow®?

Airflow® 專為有限的、面向批處理的工作流而設計。雖然您可以使用 CLI 或 REST API 觸發 DAG,但 Airflow 不適用於持續執行的、事件驅動的或流式工作負載。話雖如此,Airflow 通常與 Apache Kafka 等流系統相輔相成。Kafka 處理即時資料攝取,將資料寫入儲存。然後 Airflow 可以定期獲取這些資料並進行批處理。

如果您更喜歡點選而不是編寫程式碼,Airflow 可能不是最適合您的。Web UI 簡化了工作流管理,並且開發者體驗正在持續改進,但將工作流定義為程式碼是 Airflow 工作方式的核心—因此始終需要進行一些編碼。

此條目有幫助嗎?