在 2024 年 9 月的 Airflow 峰會上,我們宣佈有意將 Apache Airflow 3.0® 作為 Airflow 專案的下一個重要里程碑。我們很高興地宣佈 Airflow 3.0 現已釋出!
一個重磅釋出,歷時四年打造
Airflow 3.0 是 Airflow 歷史上最重大的版本——2.0 版本於 2020 年釋出,而過去四年裡,我們每個季度都會發布增量更新和版本,其中 2.10 版本已於 2024 年第四季度釋出。如今,Airflow 的月下載量已超過 3000 萬(自 2020 年以來增長了 30 多倍),有 8 萬多家組織(自 2020 年的 2.5 萬家以來增長)正在使用 Airflow,我們看到自 2.0 版本以來其受歡迎程度有了驚人的增長。
在過去四年裡,Airflow 已成長為為各種規模組織中的業務關鍵型資料工作流提供動力的平臺。我們看到 Airflow 的用例呈指數級增長,從最初的 ETL、ELT 和 Reverse ETL,擴充套件到超過 30% 的 Airflow 使用者將其用於 MLOps,以及 10% 的使用者用於 GenAI 工作流。Airflow 3 是對這種用例擴充套件的回應,並且是整個企業範圍內資料應用開發的標準。
以下是一些亮點
-
Airflow 3 對於資料從業者而言顯著更容易使用,並採納了他們對 Airflow 關鍵變更的主要請求。早期使用者對新版基於 React 的 UI、DAG 版本控制和改進的補填(Backfill)支援等功能的反應非常積極。當我在最近的 Airflow 聚會中演示這些功能時,看到資料工程師的反應,我感到非常激動。
-
在資產導向型工作流和任務導向型工作流之間無縫切換的 UI 體驗非常棒。Airflow 再次讓開發者選擇他們想要如何開發和導航,而不施加任何限制。
-
事件驅動排程(Event Driven Scheduling)的引入使 Airflow 能夠與訊息提供商無縫整合,並對 Airflow 外部發生的事件和資料資產更新做出反應。
-
引入任務執行介面(Task Execution Interface)和任務 SDK(Task SDKs)帶來的重大架構變更,使得安全模型更加強大,包括在多雲、混合雲和本地資料中心部署中實現安全、可擴充套件的執行。
這是 Airflow 社群 300 多名開發者數月以來不懈努力、共同協作的成果,我為能成為這個出色團隊的一員感到無比自豪。以下是關於此版本的更多詳細資訊。
高度需求的使用者體驗功能
DAG 版本控制
基於年度 Airflow 調查,DAG 版本控制一直是 Airflow 中最受使用者請求的功能。在 Airflow 3 中,DAG 的執行將基於啟動時的版本一直到完成,即使在新版本上傳後該 DAG 仍在執行中。UI 中的所有 DAG 執行現在都與其執行時的 DAG 版本相關聯,包括任務結構、程式碼、日誌等。這些功能在以下兩個 AIP 中進行了描述:改進 DAG 歷史記錄 (AIP-65) 和 DAG 打包與解析 (AIP-66)。

補填功能改進
另一個長期以來使用者請求的功能是更好地支援補填。補填功能常在機器學習的語境中討論,但也適用於傳統的 ETL 和 ELT 用例。在 Airflow 3 中,補填在排程器內部執行,以實現更好的控制、可擴充套件性和診斷。補填現在可以從 UI 或 API 啟動,並在 UI 中進行監控。
這在“排程器管理的補填”(AIP-78)中進行了定義,示例如下圖所示

隨時隨地,支援任何語言執行
隨處執行,支援任何語言
Airflow 3 的一個基本目標是允許在任何環境、使用任何語言執行任務。其中的一個關鍵元件是任務執行介面(Task Execution Interface)(AIP-72),它使 Airflow 演變為客戶端-伺服器架構,這是 Airflow 歷史上最重要的架構轉變之一。這支援 Celery、Kubernetes 和本地執行器,同時也帶來了新功能。這一變更的一個組成部分是 API 伺服器,它代表了任務執行介面的輸入。這一基礎功能以任務執行 API 的形式支援多雲部署和多語言。Airflow 3 版本包含 Python TaskSDK,它支援對現有 DAG 的向後相容性。支援其他語言的 TaskSDK(從 Golang 開始)將在未來幾個月內釋出。
為了使資料管道能夠在核心資料中心和雲之外的邊緣裝置上執行,Airflow 3 提供了一個提供商包形式的邊緣執行器(Edge Executor)(AIP-69)。這是一個在任務執行介面之上構建的增量功能。最初的版本已在基於 Airflow 2x 的實驗模式下發布,現在這個執行器已經演進到利用 Airflow 3 API 伺服器。
事件驅動排程和資料資產
Airflow 3 在使 Airflow 能夠對外部發生的事件(包括由外部資料系統建立或更新的資料資產)做出反應方面邁出了基礎性的一大步。這基於資料集(Datasets)向資料資產(Data Assets)的演進,並被分解為以下詳細描述的幾個 AIP,它們都是本次版本的一部分。
資料集(Datasets)向資料資產(Data Assets)的基礎性演進已作為“引入資料資產”(AIP-74)的一部分完成。這引入了觀察者(Watchers)的概念,其他下面詳細介紹的功能都利用了這一概念。資料資產方面的一個重大改進是新的資產中心語法(New Asset-Centric Syntax)(AIP-75),它可以使用 Python 裝飾器語法輕鬆地透過 DAG 定義資產,這是本次版本的一部分。
外部事件驅動排程(External event driven scheduling)(AIP-82)基於上述基礎資料資產工作,特別是觀察者(Watchers)。AIP 中定義的初始範圍已經完成,現在包含一個“通用訊息匯流排”(Common Message Bus)介面。本次版本還包含上述功能針對 AWS SQS 的實現,作為一個“開箱即用”的整合,它演示了當 AWS SQS 中有訊息到達時觸發 DAG 的過程。
推理執行和超引數調優
許多 ML 和 AI 工程師已經在使用 Airflow 進行 ML/AI Ops,特別是用於模型訓練。然而,推理執行面臨一些挑戰。透過增加對非資料間隔 DAG(抱歉,這個詞有點繞口)的支援來增強 Airflow 的推理執行能力是一個重要的改變。這項工作是“移除 DAG 執行中的執行日期唯一約束”(AIP-83)的一部分。
安全性和可用性改進
UI 現代化
作為 Airflow 3 的一部分,Airflow UI 已完全重寫,並整合了顯著改進的使用者體驗,它無縫地融合了資產導向型工作流和任務導向型工作流。這是一個顯著的改進,它使開發者能夠按照自己的意願編寫 DAG,而不必拘泥於“正確的方式”。

檢視文件中的截圖瞭解更多資訊。
基於 React 和 FastAPI 重建 UI 是一個龐大的專案,並被分解為以下詳細描述的幾個 AIP。
新 UI 的基礎是 REST API 和一組用於 UI 操作的內部 API(AIP-84),這兩者現在都基於 FastAPI。這些 API 作為上述 API 伺服器的一部分提供,也是任務執行框架的一部分。
Airflow 3.0 UI 已顯著改進,幷包含一個精簡的使用者體驗工作流,涵蓋了網格檢視(Grid view)和圖檢視(Graph view)。DAG 和資產之間的互動也更加流暢。使用者體驗一直在改進中,我們非常感謝您的反饋。這在現代 Web 應用提案(AIP-38)中詳細介紹。
作為該專案的一部分,Flask AppBuilder 現已移至一個獨立的提供商包中,不再是 Core Airflow 包的一部分。這使得安全和維護更新過程更容易,同時保留了向後相容性。這在“移除 Flask App Builder 作為核心依賴”(AIP-79)提案中有所記載。
安全性
任務執行介面和 API 伺服器的一個關鍵優勢是任務隔離(Task Isolation)。當多個團隊共享 Airflow 部署時,Airflow 企業使用者常請求此功能以獲得更好的安全態勢。隨著更多詳細需求的出現,可以在此基礎上進一步開發安全和授權模式。
透過讓 CLI 使用 Airflow API 而不是直接訪問來改進 CLI 並減少維護負擔,是 Airflow 的一個重要演進。我們現在將核心 Airflow CLI 分為兩個部分:第一部分用於本地開發和向後相容,第二部分用於使用 API 進行遠端訪問。第二部分將是一個新的提供商包,名為“airflowctl”,它可以選擇與 Core Airflow 一起安裝。這在“透過整合 API 增強 CLI 安全性”(AIP-81)提案中進行了更詳細的說明。
傑出的社群
沒有上述主導 AIP 的關鍵貢獻者的啟發和技術領導,就沒有這個版本的釋出。我們在此感謝所有人:Ash Berlin-Taylor, Brent Bovenzi, Bugra Ozturk, Constance Martineau, Daniel Standish, Jed Cunningham, Jens Scheffler, Kaxil Naik, Pierre Jeambrun, Vincent Beck, and Vikram Koka。我們還要感謝 Jarek Potiuk 在關鍵開發基礎設施和打包方面的工作,以及 Elad Kalif 對所有必需的關鍵提供商變更的引領。我們要表彰 Wei Lee 和 Ankit Chaurasia 在升級工具方面的工作,這些工具使使用者能夠輕鬆升級到 Airflow 3。
最後,特別感謝 Jed Cunningham 和 Kaxil Naik 在版本管理中扮演的關鍵角色!
全球三百多名開發者為實現此版本做出了貢獻。我們感謝他們的所有貢獻。以下按字母順序列出他們的名字
- Aakcht
- Aaron Chen
- Abhishek
- Adam Turner
- Adan
- Aditya Yadav
- Adrian Lazar
- Adrian Perea
- Ajit J Gupta
- Albert Okiri
- Alex Waygood
- Alexander Millin
- AlteredOracle
- Amar Prakash Pandey
- Amir Mor
- Amogh Desai
- Amol Saini
- Anakin Skywalker Pactores
- Andor Markus
- Andre Miranda
- Andres Lowrie
- Andrew Arochukwu
- Andrew Stein
- Andrii Abramov
- Andrii Korotkov
- Andrii Yerko
- Ankit Chaurasia
- Anthony Lin
- Antony Southworth
- Aritra Basu
- Arjun Pathak
- Arnel Jan Sarmiento
- Arnout Engelen
- Artem Suslov
- Arthur Braveheart
- Artour
- Artur Skarżyński
- Arunav Gupta
- Aryan Khurana
- Ash Berlin-Taylor
- AshKatzEm
- AutomationDev85
- Avihais12344
- Azhar Izzannada E
- Baitur Ulukbekov
- Balthazar Rouberol
- Bartosz Jankiewicz
- Bas
- Ben Chen
- Benoit Perigaud
- Biswamitra Biswas
- Bjorn Olsen
- Bluefox9x5
- Bohdan Udovenko
- Bonnie Why
- Boris Morel
- Bowrna
- Brent Bovenzi
- Bugra Ozturk
- Błażej Tecław
- Castle Cheng
- Chris Luedtke
- Christian Yarros
- Christos Bisias
- Collin McNulty
- Computer Network Investigation
- Constance Martineau
- D. Ferruzzi
- DShi
- Daniel Gellert
- Daniel Imberman
- Daniel Standish
- Daniel van der Ende
- Danish Amjad
- Danny Liu
- David Blain
- Derek
- Detlev V.
- Dewen Kong
- Dheeraj Turaga
- Diogo Rodrigues
- Dmitry Astankov
- Dmitry Pustoshilov
- Dominic Leung
- Dong-yeong0
- Doug Guthrie
- Dylan Melotik
- Elad Kalif
- Eldar Kasmamytov
- Ephraim Anierobi
- Eric
- Everton Seiei Arakaki
- Farhan
- Fedor Kobak
- Felix Uellendall
- Fred Thomsen
- Fully.is(풀리)
- GPK
- Gagan Bhullar
- Geonwoo Kim
- GlenboLake
- Gopal Dirisala
- Gregory Borodin
- Guan Ming(Wesley) Chiu
- Guangyang Li
- Guillaume Lostis
- Hari Selvarajan
- HassanAlahmed
- Hojin Jun
- Howard Yoo
- Huanjie Guo
- Hung
- Hussein Awala
- Hyunsoo Kang
- Ian Buss
- Idris Adebisi
- Igor Kholopov
- IlaiGigi
- Indrale Dnyaneshwar
- JISHAN GARGACHARYA
- Jaejun
- Jake Ferriero
- Jake Roach
- Jakub Dardzinski
- James Chaldecott
- James Regan
- Jarek Potiuk
- Jasmin Patel
- Jason
- Jed Cunningham
- Jeff Harrison
- Jens Scheffler
- Jianzhun Du
- Jimmy McBroom
- Joao Amaral
- João Pedro M Miguel
- Joel Labes
- Joey Cumines
- Joffrey Bienvenu
- John Bampton
- John C. Merfeld
- Johnny1cyber
- José Joaquín Virtudes Castro
- Joseph Ang
- JoshuaXOng
- Josix
- Julian Maicher
- Kacper Kulczak
- Kacper Muda
- Kalyan R
- Kamil Breguła
- Karen Braganza
- Karthik Dulam
- Karthik Ravi
- Karthikeyan Singaravelan
- Kaxil Naik
- Kevin Allen
- Kim
- Kris
- Kunal Bhattacharya
- LIU ZHE YOU
- Lennox Stevenson
- Linh
- Lorin Dawson
- Lou ✨
- Lucy Hu
- Lukas Mikelionis
- Luyang Liu
- Lyndon Fan
- M. Olcay Tercanlı
- Maciej Obuchowski
- Madison Swain-Bowden
- Maksim
- Marcelo Trylesinski
- Marcos Marx
- Maria
- Mark Andreev
- Mark H
- Matt Burke
- Matt Dupree
- Maxim Martynov
- Mayuresh Kedari
- Mehul Goyal
- Mike
- Mike Beckhusen
- Mikhail Dengin
- MishchenkoYuriy
- Muhammad Hanif Mohamad Musa
- Myles Hollowed
- Narendra-Neerukonda
- Natsu
- Nikita
- Niko Oliveira
- Nishant Gupta
- Nitesh Kumar Dubey Samsung
- Nitochkin
- Oleg Ovcharuk
- Oleksandr Slynko
- Omkar P
- Owen Leung
- Pandycool
- Pankaj Koti
- Park Jiwon
- Pavan Sharma
- Peng-Jui Wang
- Peter Debelak
- Phani Kumar
- Pierre Jeambrun
- Po-Yu Hsieh
- Prajwal7842
- Pratiksha
- Purna Chander
- Rafa
- Rahul Madan
- Rahul Vats
- Ramit Kataria
- Rishabh Srivastava
- Rushabh Garambha
- Ryan Eakman
- Ryan Hatter
- Rytis Ulys
- SAI GANESH S
- Sam Lendle
- SamLiaoP
- Saumil Patel
- SaurabhhB
- Sean Gabriel Bayron
- Sean Rose
- Sebastian Daum
- SeonghwanLee
- Shahar Epstein
- Shahbaz Aamir
- Shoaib UR Rehman
- Shubham Raj
- Simon Sawicki
- Siva Kumar Edupuganti
- Sneha Prabhu
- Sooter Saalu
- Srabasti Banerjee
- Stefan Keidel
- Steven Loria
- Steven Shidi Zhou
- Stijn De Haes
- Success Moses
- TakawaAkirayo
- Tamara Janina Fingerlin
- Tamas Palinkas
- Tatiana Al-Chueyr
- Topher Anderson
- Tzu-ping Chung
- Usiel Riedl
- Utkarsh Sharma
- Valentyn
- Venkat VJ
- Vikram Koka
- Vikram Medabalimi
- Vikramaditya Gaonkar
- Vincent
- Vincent Kling
- VladaZakharova
- Waldemar Hummer
- Wang Ran (汪然)
- Wei Lee
- Wojciech Szlachta
- Wonseok Yang
- Yeonguk
- Yohei Kishimoto
- Youngha, Park
- Yuan Li
- Zach Liu
- Zhen-Lun (Kevin) Hong
- althati
- ambikagarg
- atrbgithub
- awdavidson
- codecae
- dan-js
- darkag
- davidfgcorreia
- dominikhei
- ellisms
- enisnazif
- fritz-astronomer
- gaurav7261
- geraj1010
- got686-yandex
- harjeevan maan
- harry.shi
- hikaruhk
- hprassad
- ipsatrivedi
- jaejun
- jj.lee
- jonhspyro
- kanagaraj
- kandharvishnu
- leoguzman
- lucasmo
- luoyuliuyin
- mahdi alizadeh
- majorosdonat
- max
- mayankymailusfedu
- michaeljs-c
- morooshka
- ninad-opsverse
- olegkachur-e
- paolomoriello
- perry2of5
- pgvishnuram
- phi-friday
- rahulgoyal2987
- raphaelauv
- rgriffier
- rom sharon
- saucoide
- sbock-slack
- sc-anssi
- seyoon-lim
- simonprydden
- skandala23
- sonu4578
- suyesh-amatya
- svellaiyan
- tnk-ysk
- uzhastik
- vatsrahul1001
- vfeldsher
- xavipuerto
- xitep
- yangyulely
- yunchi
- 鐘翊修
- 김영준
下一步是什麼
我們期待您的反饋。請嘗試使用新版本,提交問題(issues),提交拉取請求(PRs),或者加入 Airflow 開發者郵件列表、Slack 和 GitHub 的討論。讓我們共同構建資料編排的未來。
分享