airflow - Airflow 是一个以编程方式编写、安排和监控工作流的平台。

Created at: 2015-04-14 02:04:58
Language: Python
License: Apache-2.0

Apache Airflow

派普派版本 腾讯建制版 承保状态 许可证 蟒蛇版 泊坞拉  docker 之星 派比 - 下载 神器中心 代码样式:黑色 推特关注 松弛状态

Apache Airflow (或简称 Airflow )是一个以编程方式创作,安排和监视工作流程的平台。

当工作流被定义为代码时,它们将变得更加可维护、可版本控制、可测试和协作。

使用 Airflow 将工作流创作为任务的有向无环图 (DAG)。 Airflow 调度程序在遵循指定依赖关系的同时,在一组工作线程上执行任务。丰富的命令行实用程序使在 DAG 上执行复杂手术变得轻而易举。通过丰富的用户界面,可以轻松可视化在生产中运行的管道、监视进度并在需要时解决问题。

目录

项目重点

Airflow 最适用于大多数静态且缓慢变化的工作流程。当 DAG 结构从一次运行到下一次运行相似时,它会阐明工作单元和连续性。其他类似的项目包括路易吉奥齐阿兹卡班

Airflow通常用于处理数据,但认为任务理想情况下应该是幂等的(即,任务的结果将是相同的,并且不会在目标系统中创建重复的数据),并且不应该将大量数据从一个任务传递到下一个任务(尽管任务可以使用Airflow的Xcom功能传递元数据)。对于高容量、数据密集型任务,最佳做法是委派给专门从事此类工作的外部服务。

Airflow 不是一种流解决方案,但它通常用于处理实时数据,批量从流中提取数据。

原则

  • 动态: Airflow 管道配置为代码 (Python),允许动态管道生成。这允许编写动态实例化管道的代码。
  • 可扩展:轻松定义你自己的运算符、执行器并扩展库,使其适合适合你环境的抽象级别。
  • 优雅: Airflow 管道是精益和明确的。使用功能强大的 Jinja 模板引擎将脚本参数化内置于 Airflow 的核心中。
  • 可扩展: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

  1. 仅安装 Airflow :

注意:目前仅官方支持安装。

pip

虽然可以使用 Poetrypip 工具等工具安装 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"
  1. 使用附加功能(即帖子,谷歌)进行安装
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 的最常见方式的顺序:

  • PyPI 发布以使用标准工具安装 Airflow
    pip
  • Docker映像通过工具安装 Airflow ,在库伯内特,头盔图表,,等中使用它们。你可以在最新文档中阅读有关使用、自定义和扩展图像的更多信息,并在 IMAGES.rst 文档中了解有关内部结构的详细信息。
    docker
    docker-compose
    docker swarm
  • GitHub 中的标记,用于检索用于通过 git 生成官方源包的 git 项目源

所有这些工件都不是官方发布的,但它们是使用官方发布的源代码准备的。其中一些工件是“开发”或“预发布”工件,并且根据 ASF 策略明确标记了这些工件。

用户界面

  • DAG:环境中所有 DAG 的概述。

    断续器

  • 网格:跨越时间的 DAG 的网格表示形式。

    网 格

  • :特定运行的 DAG 依赖项及其当前状态的可视化。

    图

  • 任务工期:一段时间内在不同任务上花费的总时间。

    任务工期

  • 甘特图:DAG 的持续时间和重叠。

    甘特

  • 代码:查看 DAG 源代码的快速方法。

    法典

语义版本控制

从 Airflow 2.0.0 开始,我们支持对所有发布的软件包采用严格的 SemVer 方法。

我们同意的一些特定规则定义了不同软件包的版本控制细节:

  • Airflow :SemVer 规则仅适用于核心 Airflow (不包括对提供商的任何更改)。更改 Airflow 依赖项版本的限制本身并不是重大更改。
  • Airflow 提供程序:SemVer 规则仅适用于特定提供程序代码中的更改。软件包的主要和次要版本与 Airflow 版本无关。例如,提供程序可以愉快地使用 .如果提供程序和 Airflow 包之间存在交叉依赖关系的限制,则它们在提供程序中作为限制存在。我们的目标是保持提供商与所有以前发布的 Airflow 2 版本的向后兼容性,但有时会发生重大更改,这些更改可能会使某些或所有提供商指定最低 Airflow 版本。更改支持的最低 Airflow 版本对于提供商来说是一个重大更改,因为安装新的提供程序可能会自动升级 Airflow(这可能是升级提供程序的意外副作用)。
    google 4.1.0
    amazon 3.0.3
    Airflow 2.1.2
    install_requires
  • Airflow 舵机图:SemVer 规则仅适用于图表中的更改。图表的“主要”和“次要”版本独立于“ Airflow ”版本。我们的目标是保持Helm Chart与所有已发布的Airflow 2版本的向后兼容性,但某些新功能可能仅从特定的 Airflow 版本开始工作。但是,我们可能会将头盔图限制为依赖于最小 Airflow 版本。
  • Airflow API 客户端:SemVer 主要和次要版本遵循 Airflow 的主要和次要版本。 Airflow 的第一个主要或次要 X.Y.0 版本应始终跟随所有客户端的 X.Y.0 版本。然后,客户端可以发布自己的带有错误修复的 PATCH 版本,而与 Airflow 补丁版本无关。

版本生命周期

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版本倾斜策略中进行了很好的总结。

  1. 当Python和库伯内特版本达到EOL时,我们放弃了对它们的支持。除了 Kubernetes 之外,如果两个主要的云提供商仍然为某个版本提供支持,则 Airflow 仍会继续支持该版本。我们在 EOL 日期之后立即在主版本中删除了对这些 EOL 版本的支持,并且当我们发布 Airflow 的第一个新的次要版本(如果没有新的次要版本,则为主要版本)时,它实际上被删除了。例如,对于Python 3.7,这意味着我们将在27.06.2023之后立即放弃对main的支持,并且之后发布的Airflow的第一个主要或次要版本将没有它。

  2. “最古老”支持的Python / Kubernetes版本是默认版本,直到我们决定切换到更高版本。“默认”仅在 CI PR 中的“冒烟测试”方面有意义,CI PR 使用此默认版本和可用的默认参考映像运行。目前和图像是蟒蛇3.7图像。这意味着当我们开始准备删除3.7支持时,默认参考图像将成为默认参考图像,这是Python 3.7生命周期结束前几个月。

    apache/airflow:latest
    apache/airflow:2.4.0

  3. 在 Python/Kubernetes 正式发布后,我们主要支持新版本,一旦我们使它们在我们的 CI 管道中工作(由于依赖关系主要赶上新版本的 Python,这可能不会立即生效),我们就会根据工作的 CI 设置在 Airflow 中发布新的映像/支持。

对参考 Airflow 映像的基本操作系统支持

Airflow 社区提供方便打包的容器映像,每当我们发布 Apache Airflow 版本时,这些映像都会发布。这些图像包含:

  • 使用安装 Airflow 所需的软件包来基础操作系统(稳定的 Debian 操作系统)
  • 在发布时支持的 Airflow 次要版本支持的版本中的基本 Python 安装(例如,2.3 和 2.2 行可能有不同的版本)
  • 连接到支持数据库所需的库(同样,支持的数据库集取决于 Airflow 的次要版本。
  • 预定义的一组流行提供程序(有关详细信息,请参阅 Docker 文件)。
  • 可以构建自己的自定义映像,用户可以在其中选择自己的一组提供程序和库(请参阅生成映像)
  • 将来,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有很多依赖关系 - 直接和可传递,Airflow也是 - 库和应用程序,因此我们对依赖关系的政策必须包括 - 应用程序的安装稳定性,以及为那些开发DAG的用户安装新版本的依赖关系的能力。我们开发了一种方法,用于确保 Airflow 可以以可重复的方式安装,同时我们不限制用户升级大多数依赖项。因此,我们决定默认情况下不采用 Airflow 依赖项的上限版本,除非我们有充分的理由相信由于依赖项的重要性以及升级特定依赖项所涉及的风险,需要上限。我们还将已知会导致问题的依赖项的上限。

constraints

我们的约束机制负责自动查找和升级所有非上限依赖项(前提是所有测试都通过)。我们的构建失败将表明,如果存在破坏我们测试的依赖项版本 - 表明我们应该对它们进行上部绑定,或者我们应该修复我们的代码/测试以考虑这些依赖项的上游更改。

main

每当我们建立这样的依赖关系的上限时,我们应该总是评论我们为什么要这样做 - 也就是说,我们应该有一个很好的理由来解释为什么依赖是上限的。我们还应该提到删除绑定的条件是什么。

Airflow 核心依赖关系的方法

这些和依赖项在 中维护。

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 版本已更新。

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 社区和发布管理器决定何时发布这些提供程序。这完全由社区和Apache软件基金会发布政策之后的通常发布管理流程进行管理
  • 贡献者(可能是也可能不是提供商的直接利益相关者)将承担挑选和测试旧版本提供商的负担。
  • 没有“选择”和接受过程来确定发布哪个版本的提供商。它是由贡献者通过精心挑选的更改来提升PR的行为决定的,它遵循通常的PR审查过程,其中维护者批准(或不批准)并合并(或不合并)此类PR。除非有人自愿进行樱桃采摘和测试,否则提供者不会被释放。
  • 当贡献者承诺执行樱桃采摘时,将创建要提高PR的分支(例如,作为PR中对樱桃采摘的评论)

通常,社区的工作集中在每个提供商的最新版本上。社区的方法是,我们应该积极地删除提供者的“主要”版本中的弃用 - 每当有机会增加提供者的主要版本时,我们都会尝试删除所有弃用。但是,有时有一个贡献者(他可能代表也可能不代表利益相关者),愿意努力挑选和测试对选定的,以前的提供商主要分支的不中断性更改。这导致一次最多发布两个版本的提供程序:

  • 可能破坏“最新”主要版本
  • 选择过去的主要版本,并由参与者应用非重大更改

挑选此类更改遵循与为以前的次要 Airflow 版本发布 Airflow 补丁级版本的相同过程。通常,当存在重要的错误修复并且最新版本包含未与错误修复耦合的破坏性更改时,就会进行这种挑选。在最新版本的提供程序中将它们一起发布有效地将它们耦合在一起,因此它们是单独发布的。精心挑选的更改必须由提交者按照社区的通常规则进行合并。

没有义务挑选和发布旧版本的提供商。社区继续发布这些旧版本的提供商,只要贡献者努力对较旧的提供商版本进行精心挑选和继续测试。

利益相关者的可用性可以管理“面向服务”的维护并同意这样的责任,也将推动我们愿意接受未来的新提供商成为社区管理者。

贡献

想帮助建立 Apache Airflow 吗?查看我们的贡献文档

Apache Airflow 的官方 Docker(容器)映像在 IMAGES.rst 中进行了描述。

谁使用 Apache Airflow ?

超过400个组织正在野外使用Apache Airflow 。

谁维持 Apache Airflow ?

Airflow 是社区的工作,但核心提交者/维护者负责审查和合并 PR,以及围绕新功能请求引导对话。如果你想成为一名维护者,请查看Apache Airflow 提交者的要求

我可以在演示文稿中使用 Apache Airflow 徽标吗?

是的!请务必遵守 Apache 基金会的商标政策和 Apache Airflow 品牌手册。最新的徽标可以在此存储库和Apache软件基金会网站上找到。

Airflow 商品

如果你喜欢 Apache Airflow 贴纸,T恤等,请查看红泡商店

链接

赞助商

Apache Airflow 的CI基础设施由以下机构赞助:

astronomer.io AWS 开源