Apache Airflow (或简称 Airflow )是一个以编程方式创作,安排和监视工作流程的平台。
当工作流被定义为代码时,它们将变得更加可维护、可版本控制、可测试和协作。
使用 Airflow 将工作流创作为任务的有向无环图 (DAG)。 Airflow 调度程序在遵循指定依赖关系的同时,在一组工作线程上执行任务。丰富的命令行实用程序使在 DAG 上执行复杂手术变得轻而易举。通过丰富的用户界面,可以轻松可视化在生产中运行的管道、监视进度并在需要时解决问题。
目录
Airflow 最适用于大多数静态且缓慢变化的工作流程。当 DAG 结构从一次运行到下一次运行相似时,它会阐明工作单元和连续性。其他类似的项目包括路易吉、奥齐和阿兹卡班。
Airflow通常用于处理数据,但认为任务理想情况下应该是幂等的(即,任务的结果将是相同的,并且不会在目标系统中创建重复的数据),并且不应该将大量数据从一个任务传递到下一个任务(尽管任务可以使用Airflow的Xcom功能传递元数据)。对于高容量、数据密集型任务,最佳做法是委派给专门从事此类工作的外部服务。
Airflow 不是一种流解决方案,但它通常用于处理实时数据,批量从流中提取数据。
Apache Airflow 测试如下:
主版本(开发) | 稳定版 (2.4.0) | |
---|---|---|
蟒 | 3.7, 3.8, 3.9, 3.10 | 3.7, 3.8, 3.9, 3.10 |
平台 | 上午64/亚美尼亚64(*) | 上午64/亚美尼亚64(*) |
库伯内特斯 | 1.21, 1.22, 1.23, 1.24, 1.25 | 1.20, 1.21, 1.22, 1.23, 1.24 |
PostgreSQL | 10, 11, 12, 13, 14 | 10, 11, 12, 13, 14 |
我的学习障碍 | 5.7, 8 | 5.7, 8 |
斯库特 | 3.15.0+ | 3.15.0+ |
断续器 | 2017(*), 2019 (*) | 2017(*), 2019 (*) |
* 实验性
注意:MySQL 5.x版本无法运行多个计划程序或对其进行限制 - 请参阅计划程序文档。玛丽亚DB未经测试/推荐。
注意:SQLite 用于 Airflow 测试。请勿在生产环境中使用它。我们建议使用最新的稳定版本的 SQLite 进行本地开发。
注意: Airflow 目前可以在符合 POSIX 标准的操作系统上运行。对于开发,它定期在相当现代的Linux发行版和最新版本的MacOS上进行测试。在视窗上,你可以通过 WSL2(适用于 Linux 2 的视窗子系统)或通过 Linux 容器运行它。添加Windows支持的工作通过#10388进行跟踪,但它不是高优先级的。你只应使用基于 Linux 的发行版作为“生产”执行环境,因为这是唯一受支持的环境。在我们的 CI 测试中使用的唯一发行版以及在社区托管的 DockerHub 映像中使用的发行版是 。
Debian Bullseye
访问 Airflow 官方网站文档(最新稳定版本),获取有关安装 Airflow、入门或演练更完整教程的帮助。
注意:如果你正在寻找主分支(最新开发分支)的文档:你可以 s.apache.org/airflow-docs 找到它。
有关 Airflow 改善提案(AIP)的更多信息,请访问 Airflow 维基。
相关项目的文档,如提供程序包、Docker 映像、Helm 图表,你可以在文档索引中找到它。
我们在PyPI中将 Apache Airflow 作为软件包发布。但是,安装它有时可能很棘手,因为 Airflow 既是库又是应用程序。库通常保持其依赖项的打开状态,应用程序通常固定它们,但我们不应该同时执行两者。我们决定保持依赖项尽可能开放(在 中),以便用户可以根据需要安装不同版本的库。这意味着不会不时工作,或者会产生无法使用的 Airflow 安装。
apache-airflow
setup.py
pip install apache-airflow
但是,为了进行可重复的安装,我们在孤立项和分支中保留了一组“已知工作”的约束文件。我们为每个主要/次要Python版本分别保留这些“已知工作”的约束文件。你可以在从 PyPI 安装 Airflow 时将它们用作约束文件。请注意,你必须在URL中指定正确的 Airflow 标签/版本/分支和Python版本。
constraints-main
constraints-2-0
注意:目前仅官方支持安装。
pip
虽然可以使用 Poetry 或 pip 工具等工具安装 Airflow,但它们与 工作流不同 - 尤其是在约束与需求管理方面。当前不支持通过 或 安装。
pip
Poetry
pip-tools
如果你希望使用这些工具安装 Airflow,则应使用约束文件并将其转换为工具所需的适当格式和工作流程。
pip install 'apache-airflow==2.4.0' \
--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.4.0/constraints-3.7.txt"
pip install 'apache-airflow[postgres,google]==2.4.0' \
--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.4.0/constraints-3.7.txt"
有关安装提供程序包的信息,请查看提供程序。
Apache Airflow 是一个 Apache 软件基金会(ASF)项目,我们的官方源代码发布:
根据 ASF 规则,发布的源包必须足以让用户构建和测试发布,前提是他们有权访问相应的平台和工具。
还有其他安装和使用 Airflow 的方法。这些是“方便”的方法 - 它们不是中所述的“官方版本”,但它们可以被不想自己构建软件的用户使用。
ASF Release Policy
这些是 - 按照人们安装 Airflow 的最常见方式的顺序:
pip
docker
docker-compose
docker swarm
所有这些工件都不是官方发布的,但它们是使用官方发布的源代码准备的。其中一些工件是“开发”或“预发布”工件,并且根据 ASF 策略明确标记了这些工件。
DAG:环境中所有 DAG 的概述。
网格:跨越时间的 DAG 的网格表示形式。
图:特定运行的 DAG 依赖项及其当前状态的可视化。
任务工期:一段时间内在不同任务上花费的总时间。
甘特图:DAG 的持续时间和重叠。
代码:查看 DAG 源代码的快速方法。
从 Airflow 2.0.0 开始,我们支持对所有发布的软件包采用严格的 SemVer 方法。
我们同意的一些特定规则定义了不同软件包的版本控制细节:
google 4.1.0
amazon 3.0.3
Airflow 2.1.2
install_requires
Apache Airflow 版本生命周期:
版本 | 当前补丁/次要补丁 | 州 | 首次发布 | 有限支持 | 停产/已终止 |
---|---|---|---|---|---|
2 | 2.4.0 | 支持 | 12月 17, 2020 | 待定 | 待定 |
1.10 | 1.10.15 | 停产 | 8月 27, 2018 | 12月 17, 2020 | 六月 17, 2021 |
1.9 | 1.9.0 | 停产 | 1月 03, 2018 | 8月 27, 2018 | 8月 27, 2018 |
1.8 | 1.8.2 | 停产 | 3月 19, 2017 | 03月 2018, <> | 03月 2018, <> |
1.7 | 1.7.1.2 | 停产 | 3月 28, 2016 | 3月 19, 2017 | 3月 19, 2017 |
有限的支持版本将仅支持安全性和关键错误修复。EOL版本不会获得任何修复或支持。我们始终建议所有用户为正在使用的任何主要版本运行最新的可用次要版本。我们强烈建议你尽早在方便的时间和停产日期之前升级到最新的 Airflow 主要版本。
从 Airflow 2.0开始,我们同意遵循Python和Kubernetes支持的某些规则。它们基于Python和Kubernetes的官方发布时间表,在Python开发人员指南和Kubernetes版本倾斜策略中进行了很好的总结。
当Python和库伯内特版本达到EOL时,我们放弃了对它们的支持。除了 Kubernetes 之外,如果两个主要的云提供商仍然为某个版本提供支持,则 Airflow 仍会继续支持该版本。我们在 EOL 日期之后立即在主版本中删除了对这些 EOL 版本的支持,并且当我们发布 Airflow 的第一个新的次要版本(如果没有新的次要版本,则为主要版本)时,它实际上被删除了。例如,对于Python 3.7,这意味着我们将在27.06.2023之后立即放弃对main的支持,并且之后发布的Airflow的第一个主要或次要版本将没有它。
“最古老”支持的Python / Kubernetes版本是默认版本,直到我们决定切换到更高版本。“默认”仅在 CI PR 中的“冒烟测试”方面有意义,CI PR 使用此默认版本和可用的默认参考映像运行。目前和图像是蟒蛇3.7图像。这意味着当我们开始准备删除3.7支持时,默认参考图像将成为默认参考图像,这是Python 3.7生命周期结束前几个月。
apache/airflow:latest
apache/airflow:2.4.0
在 Python/Kubernetes 正式发布后,我们主要支持新版本,一旦我们使它们在我们的 CI 管道中工作(由于依赖关系主要赶上新版本的 Python,这可能不会立即生效),我们就会根据工作的 CI 设置在 Airflow 中发布新的映像/支持。
Airflow 社区提供方便打包的容器映像,每当我们发布 Apache Airflow 版本时,这些映像都会发布。这些图像包含:
基本操作系统映像的版本是 Debian 的稳定版本。Airflow 支持使用所有当前活动的稳定版本 - 只要所有 Airflow 依赖项都支持构建,并且我们设置了 CI 管道来构建和测试操作系统版本。在以前稳定版本的操作系统生命周期结束前大约 6 个月,Airflow 会切换发布的映像以使用操作系统的最新受支持版本。例如,由于生命周期将于 2022 年 8 月结束,因此 Airflow 将分支中的图像切换为在 2022 年 2 月/3 月使用。切换发生后,该版本在下一个次要版本中使用。在靶心开关的情况下 - 使用2.3.0版本。在以前的次要版本中发布的映像将继续使用次要版本的所有其他版本所使用的版本。
Debian Buster
main
Debian Bullseye
Debian Bullseye
对映像的支持已于 2022 年 8 月完全删除,预计每个人都将停止使用 构建映像。
Debian Buster
Debian Buster
用户将继续能够使用稳定的 Debian 版本构建他们的映像,直到生命周期结束,并且在我们的 CI 中构建和验证映像,但没有在分支中使用此映像执行单元测试。
main
Airflow有很多依赖关系 - 直接和可传递,Airflow也是 - 库和应用程序,因此我们对依赖关系的政策必须包括 - 应用程序的安装稳定性,以及为那些开发DAG的用户安装新版本的依赖关系的能力。我们开发了一种方法,用于确保 Airflow 可以以可重复的方式安装,同时我们不限制用户升级大多数依赖项。因此,我们决定默认情况下不采用 Airflow 依赖项的上限版本,除非我们有充分的理由相信由于依赖项的重要性以及升级特定依赖项所涉及的风险,需要上限。我们还将已知会导致问题的依赖项的上限。
constraints
我们的约束机制负责自动查找和升级所有非上限依赖项(前提是所有测试都通过)。我们的构建失败将表明,如果存在破坏我们测试的依赖项版本 - 表明我们应该对它们进行上部绑定,或者我们应该修复我们的代码/测试以考虑这些依赖项的上游更改。
main
每当我们建立这样的依赖关系的上限时,我们应该总是评论我们为什么要这样做 - 也就是说,我们应该有一个很好的理由来解释为什么依赖是上限的。我们还应该提到删除绑定的条件是什么。
这些和依赖项在 中维护。
extras
providers
setup.cfg
我们认为很少有依赖项足够重要,可以在默认情况下对它们进行上限限制,因为众所周知,它们遵循可预测的版本控制方案,并且我们知道这些依赖项的新版本很可能会带来重大更改。我们承诺在依赖项发布时定期审查并尝试升级到较新版本的依赖项,但这是手动过程。
重要的依赖项是:
SQLAlchemy:特定次要版本的上限(众所周知,SQLAlchemy会删除弃用并引入重大更改,特别是对不同数据库的支持会发生变化并以不同的速度进行更改(例如:SQLAlchemy 1.4破坏了 Airflow 的MSSQL集成)
Alembic:以可预测和高性能的方式处理我们的迁移非常重要。它是与 SQL 算法一起开发的。我们对阿伦比克的经验是,它在次要版本中非常稳定
Flask:我们使用 Flask 作为我们网页 UI 和 API 的后骨。我们知道 Flask 的主要版本很可能会引入重大更改,因此将其限制为主要版本是有意义的。
werkzeug:已知该库会在新版本中引起问题。它与 Flask 库紧密耦合,我们应该一起更新它们
celery:芹菜是 Airflow 的重要组成部分,因为它用于芹菜出口器(或类似物)。芹菜遵循SemVer,所以我们应该将其上限到下一个主要版本。此外,当我们碰到库的上版本时,我们应该确保芹菜提供者的最低 Airflow 版本已更新)。
kubernetes:库伯内特是 Airflow 的重要组成部分,因为它用于库伯内特斯加速器(和类似)。库伯内特斯蟒蛇库遵循SemVer,所以我们应该将其上限到下一个主要版本。此外,当我们碰到库的上层版本时,我们应该确保Kubernetes提供商的最低 Airflow 版本已更新。
这些和依赖项在 中维护。
extras
providers
setup.py
默认情况下,我们不应该对提供者施加上限依赖性,但是每个提供者的维护者可能会决定添加额外的限制(并用注释来证明它们)
社区发布的提供商(大约每月节奏)对 Airflow 的最低受支持版本有限制。Airflow 的最低版本是版本(2.2、2.3 等),表示提供商可能使用此发行版中显示的功能。最小版本的 Airflow 的默认支持时间跨度(可能存在合理的例外情况)是我们增加最小 Airflow 版本,此时自次要版本的 Airflow 首次发布以来已经过去了12个月。
MINOR
例如,这意味着默认情况下,我们在 2022 年 10 月 11 日之后的第一个提供商版本中将提供商支持的最低版本的 Airflow 升级到 2.3.0(2021 年 10 月 11 日是 2.2.0)第一个版本发布的日期。
PATCHLEVEL
提供商通常与一些利益相关者联系,这些利益相关者对维护其集成中的向后兼容性非常感兴趣(例如云提供商或特定服务提供商)。但是,我们也受到Apache软件基金会发布政策的约束,该政策描述了谁发布以及如何发布ASF软件。提供商的治理模型是我们称之为“混合治理”的东西 - 我们遵循发布策略,而维护和测试精心挑选的版本的责任在于那些承诺执行精心挑选并对旧分支进行PR的人。
“混合治理”(可选,每个提供商)意味着:
通常,社区的工作集中在每个提供商的最新版本上。社区的方法是,我们应该积极地删除提供者的“主要”版本中的弃用 - 每当有机会增加提供者的主要版本时,我们都会尝试删除所有弃用。但是,有时有一个贡献者(他可能代表也可能不代表利益相关者),愿意努力挑选和测试对选定的,以前的提供商主要分支的不中断性更改。这导致一次最多发布两个版本的提供程序:
挑选此类更改遵循与为以前的次要 Airflow 版本发布 Airflow 补丁级版本的相同过程。通常,当存在重要的错误修复并且最新版本包含未与错误修复耦合的破坏性更改时,就会进行这种挑选。在最新版本的提供程序中将它们一起发布有效地将它们耦合在一起,因此它们是单独发布的。精心挑选的更改必须由提交者按照社区的通常规则进行合并。
没有义务挑选和发布旧版本的提供商。社区继续发布这些旧版本的提供商,只要贡献者努力对较旧的提供商版本进行精心挑选和继续测试。
利益相关者的可用性可以管理“面向服务”的维护并同意这样的责任,也将推动我们愿意接受未来的新提供商成为社区管理者。
想帮助建立 Apache Airflow 吗?查看我们的贡献文档。
Apache Airflow 的官方 Docker(容器)映像在 IMAGES.rst 中进行了描述。
超过400个组织正在野外使用Apache Airflow 。
Airflow 是社区的工作,但核心提交者/维护者负责审查和合并 PR,以及围绕新功能请求引导对话。如果你想成为一名维护者,请查看Apache Airflow 提交者的要求。
是的!请务必遵守 Apache 基金会的商标政策和 Apache Airflow 品牌手册。最新的徽标可以在此存储库和Apache软件基金会网站上找到。
如果你喜欢 Apache Airflow 贴纸,T恤等,请查看红泡商店。
Apache Airflow 的CI基础设施由以下机构赞助: