我们在 2024 年 9 月的 Airflow Summit 上宣布,将把 Apache Airflow 3.0® 作为 Airflow 项目的下一个重要里程碑。我们很高兴地宣布,Airflow 3.0 现已发布!
重量级发行,历时四年打造
Airflow 3.0 是 Airflow 历史上最大的一次发行——2.0 于 2020 年发布,过去四年中每个季度都有增量更新和发行,最新的 2.10 版本在 2024 年第四季度发布。每月下载量已超过 3000 万(自 2020 年起增长超过 30 倍),使用 Airflow 的组织已达 8 万家(2020 年为 2.5 万家),自 2.0 以来我们见证了其人气的惊人增长。
在过去的四年里,Airflow 已经成长为支撑各类组织关键业务数据工作流的核心。我们看到 Airflow 的使用场景从最初的 ETL、ELT 与 Reverse ETL 迅速扩大,超过 30% 的用户将其用于 MLOps,10% 用于 GenAI 工作流。Airflow 3 正是针对这些用例扩展而推出,成为企业数据应用开发的标准平台。
以下是部分亮点
-
Airflow 3 对数据从业者来说使用更为简便,并融合了他们对关键功能改动的核心需求。对新基于 React 的 UI、DAG 版本控制以及改进的回填支持等功能的早期用户反馈异常积极。我在最近的 Airflow meetup 上演示时,数据工程师们的热烈反应令我欣喜若狂。
-
在基于资产的工作流和基于任务的工作流之间的无缝 UI 切换令人赞叹。Airflow 再次让开发者可以自由选择开发和导航方式,而不受任何限制。
-
事件驱动调度的引入使 Airflow 能够无缝集成消息提供商,并对外部发生的事件以及数据资产的更新做出响应。
-
通过引入任务执行接口(Task Execution Interface)和任务 SDK,架构发生了重大变革,实现了更强的安全模型,支持在多云、混合云以及本地数据中心的安全、可扩展执行。
这得益于 Airflow 社区中 300 多位开发者数月不懈的协作,我为能成为这个精彩团队的一员感到无比自豪。以下是本次发行的更多细节。
高度需求的用户体验功能
DAG 版本控制
DAG 版本控制是根据年度 Airflow 调查用户最期待的功能。在 Airflow 3 中实现后,DAG 将基于启动时的版本一直运行到结束,即使在运行期间上传了新版本,也不会影响当前运行。UI 中的所有 DAG 运行现在都关联到对应的 DAG 版本,包括任务结构、代码、日志等。此功能在两个 AIP 中有详细描述:Improve DAG history (AIP-65),以及 DAG Bundles and Parsing (AIP-66)。

回填改进
另一个长期存在的用户请求是更好地支持回填。回填常被讨论于机器学习场景,也同样适用于传统 ETL/ELT 用例。Airflow 3 中,回填在调度器内部运行,以提升控制、可扩展性和诊断能力。现在可以通过 UI 或 API 启动回填,并在 UI 中进行监控。
此功能在 “Scheduler-managed backfills” (AIP-78) 中定义,下面展示了示例截图。

随时随地,以任意语言运行
随时随地,以任意语言运行
A foundational goal of Airflow 3 is allowing execution in any environment, in any language. => Airflow 3 的根本目标之一是实现任意环境、任意语言的执行。关键组件是任务执行接口(AIP-72),它推动 Airflow 向客户端‑服务器架构演进,这也是 Airflow 历史上最重大的架构转变之一。该接口支持 Celery、Kubernetes 与本地执行器,同时开启新能力。此变更的组成部分是作为任务执行接口输入的 API 服务器。该核心特性实现了多云部署以及多语言支持的任务执行 API。Airflow 3 发行版包含了 Python TaskSDK,实现对已有 DAG 的向后兼容。后续几个月将陆续发布包括 Golang 在内的其他语言的 TaskSDK。
为了让数据管道能够在边缘设备、核心数据中心和云之外运行,Edge Executor (AIP-69) 作为提供者包随 Airflow 3 一起提供。它是基于任务执行接口的增量特性。最初的实现以 Airflow 2x 为实验模式发布,现已演进为利用 Airflow 3 API Server 的执行器。
事件驱动调度与数据资产
Airflow 3 在使系统能够响应 Airflow 外部事件方面实现了基础性的跨越,包括外部数据系统创建或更新的数据资产。这基于 Dataset 向 Data Asset 的演进,已拆分为多个 AIP,详见下文,均为本次发行的一部分。
“Introducing Data Assets” (AIP-74) 完成了 Dataset 向 Data Asset 的根本演进。它引入了 Watcher 概念,被下面的功能所利用。Data Asset 的重要增强是全新的资产中心语法(AIP-75),通过 Python 装饰器语法即可在 DAG 中轻松定义资产,这也是本次发行的内容之一。
“External event driven scheduling” (AIP-82) 基于上述 Data Asset 工作,特别是 Watcher。AIP 中定义的初始范围已完整实现,并加入了 “Common Message Bus” 接口。本次发行还提供了对 AWS SQS 的实现,作为开箱即用的集成,展示了在 AWS SQS 中收到消息时触发 DAG 的能力。
推理执行与超参数调优
许多机器学习和人工智能工程师已经在使用 Airflow 进行 ML/AI Ops,尤其是模型训练。但在推理执行方面仍有挑战。通过支持非数据间隔 DAG(抱歉,这个表达有点拗口)来增强 Airflow 的推理执行是重要改动。此工作包含在 “Remove Execution date unique constraint from DAG run” (AIP-83) 中。
安全性与可用性改进
UI 现代化
Airflow UI 已在 Airflow 3 中彻底重写,提供了显著改进的用户体验,能够无缝融合资产导向工作流和任务导向工作流。这是一次巨大的提升,使开发者可以按自己偏好编写 DAG,而不受所谓 “唯一正确方式” 的限制。

更多信息请查看文档中的截图。
将 UI 重构为基于 React 和 FastAPI 是一个庞大的项目,已拆分为多个 AIP,细节如下。
新 UI 的基础是 REST API 以及一套用于 UI 操作的内部 API(AIP-84),它们现均基于 FastAPI。这些 API 作为上述任务执行框架的一部分,由 API Server 提供。
Airflow 3.0 UI 已大幅改进,提供了简化的用户体验工作流,涵盖网格视图和图形视图。DAG 与资产之间的交互也更为流畅。用户体验始终在迭代中,我们非常期待您的反馈。此内容在 “Modern Web Application proposal” (AIP-38) 中有详细说明。
作为该项目的一部分,Flask AppBuilder 已迁移至独立的提供者包,不再是 Core Airflow 的一部分。这简化了安全和维护更新流程,同时保持向后兼容。相关内容记录在 “Remove Flask App Builder as a Core Dependency” 提案(AIP-79) 中。
安全
任务执行接口和 API 服务器的关键优势之一是任务隔离。这一直是企业级 Airflow 部署所需求的,以在多个团队共享同一部署时提升安全姿态。基于此基础可以进一步开发安全和授权模式,以满足更细粒度的需求。
通过让 CLI 使用 Airflow API 而非直接访问来改进 CLI 并降低维护负担,是 Airflow 的重要演进。我们已将核心 CLI 拆分为两部分:一部分用于本地开发和向后兼容,另一部分用于通过 API 进行远程访问。后者将作为名为 “airflowctl” 的提供者包提供,可选安装在 Core Airflow 之外。详细内容见 “Enhanced security in CLI via Integration of API” 提案(AIP-81)。
一个了不起的社区
若没有关键贡献者的灵感与技术领导,本次发行不可能实现。我们在此感谢他们:Ash Berlin‑Taylor、Brent Bovenzi、Bugra Ozturk、Constance Martineau、Daniel Standish、Jed Cunningham、Jens Scheffler、Kaxil Naik、Pierre Jeambrun、Vincent Beck 与 Vikram Koka。我们还要感谢 Jarek Potiuk 对关键开发基础设施和打包工作的贡献,以及 Elad Kalif 对所有关键提供者变更的 shepherd。特别致谢 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
- Sriraj 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 Choo
- 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
- 鐘翊修
- 김영준
下一步计划
我们期待您的反馈。请尝试本次发行、提交 Issue、提交 PR,或加入 Airflow 开发者邮件列表、Slack 与 GitHub 的讨论。让我们一起共建数据编排的未来。
分享