我们在 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)。

DAG Versioning UI

回填改进

另一个长期存在的用户请求是更好地支持回填。回填常被讨论于机器学习场景,也同样适用于传统 ETL/ELT 用例。Airflow 3 中,回填在调度器内部运行,以提升控制、可扩展性和诊断能力。现在可以通过 UI 或 API 启动回填,并在 UI 中进行监控。

此功能在 “Scheduler-managed backfills” (AIP-78) 中定义,下面展示了示例截图。

Backfill UI

随时随地,以任意语言运行

随时随地,以任意语言运行

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,而不受所谓 “唯一正确方式” 的限制。

Airflow 3.0’s new UI

更多信息请查看文档中的截图

将 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 的讨论。让我们一起共建数据编排的未来。

分享

阅读更多

Apache Airflow 3.2.0:大规模数据感知工作流

Rahul Vats

Apache Airflow 3.2.0 引入了资产分区,用于细粒度的管道编排;支持面向企业规模的多团队部署;提供同步的截止日期警报回调;并在实现完整 Task SDK 分离方面取得持续进展。

Apache Airflow 3.1.0:以人为本的工作流

Kaxil Naik

Apache Airflow 3.1.0 引入了人机交互(Human‑in‑the‑Loop)工作流、支持 17 种语言的国际化、截止日期警报,以及面向数据编排团队的 React 插件系统。