几乎每次打开 LinkedIn,都会看到在本已拥挤的数据领域里又冒出一款新工具。随着数据团队不断为其“数据栈”添砖加瓦,他们需要一种方式来管理并连接这些分散的工具。
数据编排是制定、执行与监控流程的过程,这些流程会在整个数据生态系统中合并、转换并组织数据。为此,数据工程师会使用数据 编排工具。在本文中,我们将探讨两款最受欢迎的编排工具:Apache Airflow 与 Dagster。开始吧!
什么是 Airflow?
Airflow 是以代码形式构建、运行和监控数据管道的行业标准。它最初由 Airbnb 的数据工程团队于 2014 年开发。此后,该项目被 Apache 软件基金会接纳,并成为其旗下最受欢迎的产品之一。
Airflow 每月下载量超过三千万,拥有活跃的贡献者和用户社区。在 Airflow 中,数据管道被称为 DAG(有向无环图)。
您可以在我们的教程中进一步了解 Airflow:Apache Airflow 入门。
什么是 Dagster?
与 Airflow 类似,Dagster 也是一款允许用户以代码形式编写数据管道的编排工具。它是开源的,最初于 2019 年发布。Dagster 使用 Python 定义“资产”(assets),即数据管道的构建块。
Dagster 在相对不那么拥挤的领域中崭露头角,成为 Airflow 的竞争者。该项目由其开源社区维护,并由 Dagster Labs 提供商业支持。
连接现代数据栈
那么,Airflow 和 Dagster 在现代数据栈中处于什么位置?我们先看下面的架构图。

包含现代数据栈常用工具示例的架构图。
该架构图展示了许多人认为的标准数据栈。它由源系统、数据仓库与转换工具,以及诸如 Tableau 和 Looker 等下游“目的地”组成。
在这里,Airflow 和 Dagster 就是连接该数据生态系统的箭头。缺少编排工具时,很难将数据从一个工具顺畅传递到另一个工具。
像 Airflow 和 Dagster 这样的编排工具还提供了可观测性层,使我们更容易理解数据从源到目的地的管道过程中的位置、方式与时间,以及沿途如何被处理。
Dagster vs Airflow:关键特性与功能
如您所料,Airflow 与 Dagster 在预期用途以及其在现代数据栈中承担的角色方面有许多相似之处,包括:
- 以代码的方式编写管道
- 与现代数据栈的内置集成
- 本地开发体验
不过,每款工具也都有其独特的功能与特性,足以独当一面。
Airflow
先来看 Airflow 的一些主要特性:
理解 Airflow 与 DAG
在 Airflow 中,数据管道称为 DAG——即有向无环图。可以把 DAG 想象为按特定顺序连接的一组任务。DAG 最基本的构建块是任务。例如,在一个执行抽取、转换与加载(ETL)的管道中,“转换”步骤就是一个独立任务。
这些任务通常通过 Airflow 的 operator 定义。但正如您将看到的,还可以通过 TaskFlow API 以另一种方式定义任务。
在 Airflow 中调度 DAG
在 Airflow 中调度管道具备极高的灵活性。需要每天运行一次管道?不成问题。想在每个月的第一个周五执行?也很容易。再比如,若您的经理要求在数据集更新时触发某个 DAG?Airflow 同样可以做到。
Airflow 在调度 DAG 方面提供了丰富的自定义选项。借助 CRON、Timetables 与 data-aware 调度等功能,您可以让 DAG 在任何所需时间运行。
TaskFlow API
为让数据专业人士更易于编写 DAG,Airflow 社区引入了 TaskFlow API。相比传统使用 operator 的方式,TaskFlow API 允许您通过给函数添加装饰器来定义任务。这使在任务间共享数据与建立任务依赖变得更简单直观。
此外,像 Astro SDK 这样的工具也构建在 TaskFlow API 之上,进一步扩展了其能力。
Dagster
接下来看看 Dagster 的对比情况:
Dagster 的资产驱动方法
Dagster 采用独特的资产驱动方法来构建数据管道。在 Dagster 中,任何存储在持久化存储中的数据对象——如文件或表——都称为资产(asset)。
这些资产通过 Python 函数在代码中定义。当这些函数被执行时,Dagster 会自动创建依赖并实体化该资产。以资产为中心的方法使追踪数据在管道内的生产与消费变得容易。
理解 Dagster 中的 Ops
Dagster 的另一个关键概念是“ops”,与 Airflow 中的任务有些相似。Op 表示数据管道中的单个步骤,每个 op 都有输入与输出,这些输入与输出可由资产构成。此外,这些输入与输出可以添加类型,以清晰界定正在处理的数据。
那么,ops 与资产之间是什么关系?Ops 本质上是对资产(即数据对象本身)进行操作的步骤(如抽取、转换、加载)。
Dagster 的类型系统
为使管道中的数据流更加清晰,Dagster 使用强大的类型系统来校验每个 op 的输入与输出。虽然 Airflow 支持 Python 类型定义,但 Dagster 将类型化作为其管道编写体验的核心部分。
不仅 ops 可以类型化,资产定义也可以类型化,从而确保资产生成的数据正确且已验证。
Airflow vs Dagster:开发者体验
在选择编排工具时,功能密度、总体拥有成本与可扩展性等因素可能都会进入考量清单。话虽如此,务必牢记开发者体验。直观、高效且稳健的开发者体验有助于快速迭代,并主动应对如运行单元测试、管理依赖等挑战。
Airflow
Airflow 社区
遇到一个怎么也解决不了的 Airflow 问题或 Bug?很可能它已经有人解决过。Airflow 拥有 Apache 项目中规模最大的 Slack 社区之一,并拥有三千多名贡献者。围绕 Airflow 项目已经产生了数以千计的博客、教程与课程。除了为 Airflow 用户提供支持之外,社区还负责构建与维护 Airflow 项目本身。
作为 Apache Airflow 项目背后的商业开发者,Astronomer 将 Airflow 的开发者体验提升到了新水平。astro CLI 为 Airflow 工具提供了额外的抽象层与功能。Astronomer 还提供其注册表与 “Ask Astro” 聊天机器人,帮助开发者解答各种 Airflow 问题。
本地开发与测试
让 Airflow 成为颇具吸引力的编排选项之一的特性,是其支持本地开发与测试。借助airflow CLI,开发者可以在数秒内启动一个 Airflow 实例。随后即可在本地修改代码,并通过 UI 或 CLI 进行测试。这有助于快速迭代并缩短发布周期,尤其适用于高度依赖 Airflow 的团队。
开发 DAG 的新工具
有一段时间,定义 Airflow DAG 的唯一方式是使用传统的 operators。TaskFlow API 很快改变了这一点,提供了创建 DAG 的替代方案。如今,诸如dag-factory 与 gusty 等工具让编写与执行 DAG 变得前所未有的简单。
Dagster
Dagster 的本地开发体验在很大程度上与 Airflow 相匹配,包括本地开发、测试与执行管道的能力。二者都支持常见的企业级 SDLC 实践,如CI/CD。
然而,Dagster 很难与 Airflow 社区的庞大体量相媲美。Airflow 拥有海量社区资源,而 Dagster 仍在追赶之中。使用 Dagster 开发和排障数据管道时,从业者可能会发现难以及时找到实现方案所需的资源。
易于测试
Dagster 的资产驱动管道开发方法使其非常易于测试。事实上,测试是 Dagster 价值主张的核心理念之一。配合上文提到的类型系统,Dagster 将确保数据管道以类似软件产品测试的方式进行测试作为优先事项。
Dagster 文档强调了任何管道定义中业务逻辑纠缠不清的挑战,并给出了测试时处理该问题的常见技术。这也是不少人认为 Airflow 开发者体验有所欠缺的领域。
Dagster vs Airflow:优势与不足
对 Airflow 与 Dagster 的使用感有了初步认识了吗?接下来,我们将拆解各自的优势领域,以及一些已知短板。
Airflow
无限可扩展性
或许有些陈词滥调,但用 Airflow,天花板几乎不存在。该项目的可扩展性首屈一指。Airflow 开发者可以自行构建 operator、sensor、executor,甚至 timetable。对于有独特用例的数据团队而言,这极具吸引力。不想自己构建自定义集成?
别担心,您大概率不需要。现有集成超过 1,600 个,简单执行一次pip 安装即可使用。作为数据编排的行业标准,Airflow 受益于持续创新,形成某种“正向反馈循环”。
在生产环境运行 Airflow
作为真正的开源产品,线上运行 Airflow 的方式多种多样。从本地部署的 Kubernetes 集群到完全托管服务,数以千计的企业都在生产环境中运行 Airflow。
政府与合规要求、对数据隐私与安全的承诺,以及复杂的网络环境,常常迫使数据团队以超出想象的方式去配置工具。对于这类团队而言,在生产中运行像 Airflow 这样的工具需要尽可能多的灵活性与自定义能力。也有团队希望由托管服务提供商来承担所有繁重工作。使用 Airflow,这两种极端(以及介于其间的各种选项)都可行。
学习曲线
Airflow 的可扩展性很强,拥有数以千计的插件。可以用多种技术定义 DAG,使用 data-aware 调度触发管道,还能配置自定义的密钥后端。
这意味着要最大化利用 Airflow 的能力,会有一定的学习曲线。
对于希望快速编写并执行数据管道的数据工程师而言,Airflow 存在一定的入门门槛。这往往会让数据工程师倾向于选择更为直接的方案,例如 Dagster。
Dagster
直观的管道编写
使用 Dagster 构建数据管道十分直观。其资产驱动方法对希望以尽可能少的开销将管道投入生产的数据从业者很有吸引力。
与使用传统 Airflow operator 相比,Dagster 的学习曲线要小得多,尤其是对那些习惯用 Python 函数来构建数据管道的用户。这是 Dagster 的一大优势,往往也是许多数据团队选择信任 Dagster 来驱动其数据管道的重要原因。
不断壮大的社区
即便对 Dagster 来说,要与 Airflow 社区竞争也并不容易。从为开源项目贡献代码,到为数据栈中的新工具构建连接器,再到解答问题与完善文档,Airflow 社区几乎无所不包。话说回来,Dagster 社区正在快速增长。对于企业级用户而言,这个新兴社区既是风险,也是将自身影响力注入 Dagster 项目的机会。
Airflow vs. Dagster:该如何选择?
既然我们已经比较了这两款工具,那么哪一款更适合您?下表为您汇总了对比结果:
|
特性/方面
|
Airflow
|
Dagster
|
|
管道概念
|
使用有向无环图(DAG)表示管道,任务是基本单元。
|
采用资产驱动方法,任何被存储的数据对象称为资产,操作称为“ops”。
|
|
任务表示
|
通过 operators 定义任务,或使用 TaskFlow API 进行基于函数的任务定义。
|
使用 ops 表示管道步骤,具有带类型的输入与输出以提升清晰度。
|
|
调度
|
通过 CRON、timetables 与 data-aware 触发实现高度灵活的调度。
|
调度不被重点强调,但与资产及其依赖相关联。
|
|
本地开发
|
通过 Airflow CLI 支持本地开发,实现快速迭代与测试。
|
同样支持本地开发与测试,但可用的社区资源较少。
|
|
类型系统
|
支持 Python 类型提示,但并非核心特性。
|
强类型系统在每一步校验输入与输出,是管道设计的核心。
|
|
可扩展性
|
可扩展性极强,拥有 1600+ 集成,且可自定义 operators、sensors 等。
|
可扩展性相对有限,但对 Python 函数用户更直观。
|
|
社区支持
|
庞大且成熟的社区,数千名贡献者与大量资源(如博客、教程)。
|
社区较小但增长迅速,提供参与与影响项目的机会。
|
|
学习难度
|
由于可扩展性与自定义特性,学习曲线更陡峭。
|
由于直观的管道编写与资产驱动方法,学习曲线更平缓。
|
|
测试
|
可进行测试,但并非核心关注点。
|
高度重视测试,资产驱动方法让管道更易测试。
|
|
生产部署
|
可运行于多种环境,从本地 Kubernetes 到完全托管服务。
|
生产部署选项尚不够成熟,但对企业用例仍具灵活性。
|
|
自定义集成
|
几乎无限的可扩展性,拥有数千集成并可创建自定义组件。
|
与 Airflow 相比有限,但随着社区扩张而增长。
|
|
开发者体验
|
TaskFlow API 及 dag-factory 等工具提升开发者体验。
|
更直观,强调简单与快速部署,但可用工具较少。
|
下图用图示方式总结了 Airflow 与 Dagster 在特性与功能方面的关键相似点与差异。

Airflow 与 Dagster 之间的相似点。
现在,价值百万的问题来了:这项工作该选哪款编排工具?
为何选择 Airflow?
简单说,Airflow 是在生产中编写与运行数据管道的事实标准。是的,Dagster 的某些设计模式在技术上可能优于 Airflow。但 Airflow 的可扩展性与围绕该项目成长起来的社区,使其成为成熟数据团队的轻松之选。Airflow 兼具两方面优势:海量的现成工具库加上您可以想象到的任意 operator、sensor 或 hook 的自定义能力。Airflow 已找到自己的定位,短期内不会缺席。
为何选择 Dagster?
对于习惯编写自研数据管道的小型数据团队而言,Dagster 或许就是合适之选。尽管 Dagster 不一定拥有 Airflow 支持的那些“花哨功能”,但它能让想法快速走到生产。Dagster 为关键事项提供了一流支持(如本地开发、完善的单元测试以及模块化框架),并且拥有大量集成。随着项目走向成熟、社区不断壮大,Dagster 在保持低门槛的同时,正持续缩小与 Airflow 的功能差距。
结语
比较工具总是充满挑战。很难简单地说谁“更好”,或把某个工具硬塞进特定用例。说实话,Airflow 与 Dagster 的底层框架惊人地相似。优秀的数据从业者在选择工具时,并不会只看功能,而是关注将该工具集成到自身生态系统后对流程的影响。
Airflow 是否能让我的团队更快迭代?像 Dagster 这样的工具能否帮助工程师在上线前更好地测试代码?这款编排工具是否契合更宏观的数据平台愿景?这些问题能帮助数据团队及其相关方创造价值。
如果您已准备好开始使用 Apache Airflow,欢迎查看 DataCamp 的Python 中的 Airflow 入门课程。您将学习使用任务、传感器等基础知识,并掌握构建首批 Airflow DAG 所需的一切。
几乎每次打开 LinkedIn,都会看到在本已拥挤的数据领域里又冒出一款新工具。随着数据团队不断为其“数据栈”添砖加瓦,他们需要一种方式来管理并连接这些分散的工具。
数据编排是制定、执行与监控流程的过程,这些流程会在整个数据生态系统中合并、转换并组织数据。为此,数据工程师会使用数据 编排工具。在本文中,我们将探讨两款最受欢迎的编排工具:Apache Airflow 与 Dagster。开始吧!
什么是 Airflow?
Airflow 是以代码形式构建、运行和监控数据管道的行业标准。它最初由 Airbnb 的数据工程团队于 2014 年开发。此后,该项目被 Apache 软件基金会接纳,并成为其旗下最受欢迎的产品之一。
Airflow 每月下载量超过三千万,拥有活跃的贡献者和用户社区。在 Airflow 中,数据管道被称为 DAG(有向无环图)。
您可以在我们的教程中进一步了解 Airflow:Apache Airflow 入门。
什么是 Dagster?
与 Airflow 类似,Dagster 也是一款允许用户以代码形式编写数据管道的编排工具。它是开源的,最初于 2019 年发布。Dagster 使用 Python 定义“资产”(assets),即数据管道的构建块。
Dagster 在相对不那么拥挤的领域中崭露头角,成为 Airflow 的竞争者。该项目由其开源社区维护,并由 Dagster Labs 提供商业支持。
连接现代数据栈
那么,Airflow 和 Dagster 在现代数据栈中处于什么位置?我们先看下面的架构图。
包含现代数据栈常用工具示例的架构图。
该架构图展示了许多人认为的标准数据栈。它由源系统、数据仓库与转换工具,以及诸如 Tableau 和 Looker 等下游“目的地”组成。
在这里,Airflow 和 Dagster 就是连接该数据生态系统的箭头。缺少编排工具时,很难将数据从一个工具顺畅传递到另一个工具。
像 Airflow 和 Dagster 这样的编排工具还提供了可观测性层,使我们更容易理解数据从源到目的地的管道过程中的位置、方式与时间,以及沿途如何被处理。
Dagster vs Airflow:关键特性与功能
如您所料,Airflow 与 Dagster 在预期用途以及其在现代数据栈中承担的角色方面有许多相似之处,包括:
不过,每款工具也都有其独特的功能与特性,足以独当一面。
Airflow
先来看 Airflow 的一些主要特性:
理解 Airflow 与 DAG
在 Airflow 中,数据管道称为 DAG——即有向无环图。可以把 DAG 想象为按特定顺序连接的一组任务。DAG 最基本的构建块是任务。例如,在一个执行抽取、转换与加载(ETL)的管道中,“转换”步骤就是一个独立任务。
这些任务通常通过 Airflow 的 operator 定义。但正如您将看到的,还可以通过 TaskFlow API 以另一种方式定义任务。
在 Airflow 中调度 DAG
在 Airflow 中调度管道具备极高的灵活性。需要每天运行一次管道?不成问题。想在每个月的第一个周五执行?也很容易。再比如,若您的经理要求在数据集更新时触发某个 DAG?Airflow 同样可以做到。
Airflow 在调度 DAG 方面提供了丰富的自定义选项。借助 CRON、Timetables 与 data-aware 调度等功能,您可以让 DAG 在任何所需时间运行。
TaskFlow API
为让数据专业人士更易于编写 DAG,Airflow 社区引入了 TaskFlow API。相比传统使用 operator 的方式,TaskFlow API 允许您通过给函数添加装饰器来定义任务。这使在任务间共享数据与建立任务依赖变得更简单直观。
此外,像 Astro SDK 这样的工具也构建在 TaskFlow API 之上,进一步扩展了其能力。
Dagster
接下来看看 Dagster 的对比情况:
Dagster 的资产驱动方法
Dagster 采用独特的资产驱动方法来构建数据管道。在 Dagster 中,任何存储在持久化存储中的数据对象——如文件或表——都称为资产(asset)。
这些资产通过 Python 函数在代码中定义。当这些函数被执行时,Dagster 会自动创建依赖并实体化该资产。以资产为中心的方法使追踪数据在管道内的生产与消费变得容易。
理解 Dagster 中的 Ops
Dagster 的另一个关键概念是“ops”,与 Airflow 中的任务有些相似。Op 表示数据管道中的单个步骤,每个 op 都有输入与输出,这些输入与输出可由资产构成。此外,这些输入与输出可以添加类型,以清晰界定正在处理的数据。
那么,ops 与资产之间是什么关系?Ops 本质上是对资产(即数据对象本身)进行操作的步骤(如抽取、转换、加载)。
Dagster 的类型系统
为使管道中的数据流更加清晰,Dagster 使用强大的类型系统来校验每个 op 的输入与输出。虽然 Airflow 支持 Python 类型定义,但 Dagster 将类型化作为其管道编写体验的核心部分。
不仅 ops 可以类型化,资产定义也可以类型化,从而确保资产生成的数据正确且已验证。
Airflow vs Dagster:开发者体验
在选择编排工具时,功能密度、总体拥有成本与可扩展性等因素可能都会进入考量清单。话虽如此,务必牢记开发者体验。直观、高效且稳健的开发者体验有助于快速迭代,并主动应对如运行单元测试、管理依赖等挑战。
Airflow
Airflow 社区
遇到一个怎么也解决不了的 Airflow 问题或 Bug?很可能它已经有人解决过。Airflow 拥有 Apache 项目中规模最大的 Slack 社区之一,并拥有三千多名贡献者。围绕 Airflow 项目已经产生了数以千计的博客、教程与课程。除了为 Airflow 用户提供支持之外,社区还负责构建与维护 Airflow 项目本身。
作为 Apache Airflow 项目背后的商业开发者,Astronomer 将 Airflow 的开发者体验提升到了新水平。astro CLI 为 Airflow 工具提供了额外的抽象层与功能。Astronomer 还提供其注册表与 “Ask Astro” 聊天机器人,帮助开发者解答各种 Airflow 问题。
本地开发与测试
让 Airflow 成为颇具吸引力的编排选项之一的特性,是其支持本地开发与测试。借助airflow CLI,开发者可以在数秒内启动一个 Airflow 实例。随后即可在本地修改代码,并通过 UI 或 CLI 进行测试。这有助于快速迭代并缩短发布周期,尤其适用于高度依赖 Airflow 的团队。
开发 DAG 的新工具
有一段时间,定义 Airflow DAG 的唯一方式是使用传统的 operators。TaskFlow API 很快改变了这一点,提供了创建 DAG 的替代方案。如今,诸如dag-factory 与 gusty 等工具让编写与执行 DAG 变得前所未有的简单。
Dagster
Dagster 的本地开发体验在很大程度上与 Airflow 相匹配,包括本地开发、测试与执行管道的能力。二者都支持常见的企业级 SDLC 实践,如CI/CD。
然而,Dagster 很难与 Airflow 社区的庞大体量相媲美。Airflow 拥有海量社区资源,而 Dagster 仍在追赶之中。使用 Dagster 开发和排障数据管道时,从业者可能会发现难以及时找到实现方案所需的资源。
易于测试
Dagster 的资产驱动管道开发方法使其非常易于测试。事实上,测试是 Dagster 价值主张的核心理念之一。配合上文提到的类型系统,Dagster 将确保数据管道以类似软件产品测试的方式进行测试作为优先事项。
Dagster 文档强调了任何管道定义中业务逻辑纠缠不清的挑战,并给出了测试时处理该问题的常见技术。这也是不少人认为 Airflow 开发者体验有所欠缺的领域。
Dagster vs Airflow:优势与不足
对 Airflow 与 Dagster 的使用感有了初步认识了吗?接下来,我们将拆解各自的优势领域,以及一些已知短板。
Airflow
无限可扩展性
或许有些陈词滥调,但用 Airflow,天花板几乎不存在。该项目的可扩展性首屈一指。Airflow 开发者可以自行构建 operator、sensor、executor,甚至 timetable。对于有独特用例的数据团队而言,这极具吸引力。不想自己构建自定义集成?
别担心,您大概率不需要。现有集成超过 1,600 个,简单执行一次pip 安装即可使用。作为数据编排的行业标准,Airflow 受益于持续创新,形成某种“正向反馈循环”。
在生产环境运行 Airflow
作为真正的开源产品,线上运行 Airflow 的方式多种多样。从本地部署的 Kubernetes 集群到完全托管服务,数以千计的企业都在生产环境中运行 Airflow。
政府与合规要求、对数据隐私与安全的承诺,以及复杂的网络环境,常常迫使数据团队以超出想象的方式去配置工具。对于这类团队而言,在生产中运行像 Airflow 这样的工具需要尽可能多的灵活性与自定义能力。也有团队希望由托管服务提供商来承担所有繁重工作。使用 Airflow,这两种极端(以及介于其间的各种选项)都可行。
学习曲线
Airflow 的可扩展性很强,拥有数以千计的插件。可以用多种技术定义 DAG,使用 data-aware 调度触发管道,还能配置自定义的密钥后端。
这意味着要最大化利用 Airflow 的能力,会有一定的学习曲线。
对于希望快速编写并执行数据管道的数据工程师而言,Airflow 存在一定的入门门槛。这往往会让数据工程师倾向于选择更为直接的方案,例如 Dagster。
Dagster
直观的管道编写
使用 Dagster 构建数据管道十分直观。其资产驱动方法对希望以尽可能少的开销将管道投入生产的数据从业者很有吸引力。
与使用传统 Airflow operator 相比,Dagster 的学习曲线要小得多,尤其是对那些习惯用 Python 函数来构建数据管道的用户。这是 Dagster 的一大优势,往往也是许多数据团队选择信任 Dagster 来驱动其数据管道的重要原因。
不断壮大的社区
即便对 Dagster 来说,要与 Airflow 社区竞争也并不容易。从为开源项目贡献代码,到为数据栈中的新工具构建连接器,再到解答问题与完善文档,Airflow 社区几乎无所不包。话说回来,Dagster 社区正在快速增长。对于企业级用户而言,这个新兴社区既是风险,也是将自身影响力注入 Dagster 项目的机会。
Airflow vs. Dagster:该如何选择?
既然我们已经比较了这两款工具,那么哪一款更适合您?下表为您汇总了对比结果:
特性/方面
Airflow
Dagster
管道概念
使用有向无环图(DAG)表示管道,任务是基本单元。
采用资产驱动方法,任何被存储的数据对象称为资产,操作称为“ops”。
任务表示
通过 operators 定义任务,或使用 TaskFlow API 进行基于函数的任务定义。
使用 ops 表示管道步骤,具有带类型的输入与输出以提升清晰度。
调度
通过 CRON、timetables 与 data-aware 触发实现高度灵活的调度。
调度不被重点强调,但与资产及其依赖相关联。
本地开发
通过 Airflow CLI 支持本地开发,实现快速迭代与测试。
同样支持本地开发与测试,但可用的社区资源较少。
类型系统
支持 Python 类型提示,但并非核心特性。
强类型系统在每一步校验输入与输出,是管道设计的核心。
可扩展性
可扩展性极强,拥有 1600+ 集成,且可自定义 operators、sensors 等。
可扩展性相对有限,但对 Python 函数用户更直观。
社区支持
庞大且成熟的社区,数千名贡献者与大量资源(如博客、教程)。
社区较小但增长迅速,提供参与与影响项目的机会。
学习难度
由于可扩展性与自定义特性,学习曲线更陡峭。
由于直观的管道编写与资产驱动方法,学习曲线更平缓。
测试
可进行测试,但并非核心关注点。
高度重视测试,资产驱动方法让管道更易测试。
生产部署
可运行于多种环境,从本地 Kubernetes 到完全托管服务。
生产部署选项尚不够成熟,但对企业用例仍具灵活性。
自定义集成
几乎无限的可扩展性,拥有数千集成并可创建自定义组件。
与 Airflow 相比有限,但随着社区扩张而增长。
开发者体验
TaskFlow API 及 dag-factory 等工具提升开发者体验。
更直观,强调简单与快速部署,但可用工具较少。
下图用图示方式总结了 Airflow 与 Dagster 在特性与功能方面的关键相似点与差异。
Airflow 与 Dagster 之间的相似点。
现在,价值百万的问题来了:这项工作该选哪款编排工具?
为何选择 Airflow?
简单说,Airflow 是在生产中编写与运行数据管道的事实标准。是的,Dagster 的某些设计模式在技术上可能优于 Airflow。但 Airflow 的可扩展性与围绕该项目成长起来的社区,使其成为成熟数据团队的轻松之选。Airflow 兼具两方面优势:海量的现成工具库加上您可以想象到的任意 operator、sensor 或 hook 的自定义能力。Airflow 已找到自己的定位,短期内不会缺席。
为何选择 Dagster?
对于习惯编写自研数据管道的小型数据团队而言,Dagster 或许就是合适之选。尽管 Dagster 不一定拥有 Airflow 支持的那些“花哨功能”,但它能让想法快速走到生产。Dagster 为关键事项提供了一流支持(如本地开发、完善的单元测试以及模块化框架),并且拥有大量集成。随着项目走向成熟、社区不断壮大,Dagster 在保持低门槛的同时,正持续缩小与 Airflow 的功能差距。
结语
比较工具总是充满挑战。很难简单地说谁“更好”,或把某个工具硬塞进特定用例。说实话,Airflow 与 Dagster 的底层框架惊人地相似。优秀的数据从业者在选择工具时,并不会只看功能,而是关注将该工具集成到自身生态系统后对流程的影响。
Airflow 是否能让我的团队更快迭代?像 Dagster 这样的工具能否帮助工程师在上线前更好地测试代码?这款编排工具是否契合更宏观的数据平台愿景?这些问题能帮助数据团队及其相关方创造价值。
如果您已准备好开始使用 Apache Airflow,欢迎查看 DataCamp 的Python 中的 Airflow 入门课程。您将学习使用任务、传感器等基础知识,并掌握构建首批 Airflow DAG 所需的一切。