Airflow 工作流的气流与AWS Step功能

Airflow 工作流的气流与AWS Step功能,airflow,aws-step-functions,Airflow,Aws Step Functions,我正在从事一个项目,该项目从AWS S3获取一组输入数据,对其进行预处理和分割,旋转10K批处理容器以在AWS批处理上并行处理分割的数据,对数据进行后期聚合,并将其推送到S3 我已经有了来自其他项目的气流+批处理的软件模式,但还没有处理10k并行任务的比例因子。这很好,因为我可以查看哪些任务失败,并在调试后重试任务。但在一个EC2实例上处理这么多任务似乎是一个障碍。另一种选择是让一个任务启动10k容器并从那里监控它 我没有阶跃功能的经验,但听说这是AWS的气流。Step函数+批处理的在线模式似乎

我正在从事一个项目,该项目从AWS S3获取一组输入数据,对其进行预处理和分割,旋转10K批处理容器以在AWS批处理上并行处理分割的数据,对数据进行后期聚合,并将其推送到S3

我已经有了来自其他项目的气流+批处理的软件模式,但还没有处理10k并行任务的比例因子。这很好,因为我可以查看哪些任务失败,并在调试后重试任务。但在一个EC2实例上处理这么多任务似乎是一个障碍。另一种选择是让一个任务启动10k容器并从那里监控它


我没有阶跃功能的经验,但听说这是AWS的气流。Step函数+批处理的在线模式似乎很多。步骤函数似乎是检查用例的好方法吗?对于失败的作业/重试任务的能力,您是否获得了与Airflow相同的见解?

我已经研究过Apache Airflow和AWS Step函数,以下是一些见解:

  • Step功能提供开箱即用的维护。它具有高可用性和可扩展性,这是您的用例所必需的,对于Airflow,我们必须在服务器或容器(kubernetes)上通过自动缩放/负载平衡来实现*
  • 气流和台阶功能都有用户友好的用户界面。虽然气流支持状态机的多种表示形式,但Step功能仅将状态机显示为DAG
  • 从2.0版开始,Airflow的Rest API现在已启用。AWS Step功能还受一系列生产分级cli和
  • Airflow有服务器成本,而Step函数有4000个/月的免费步骤执行(免费层)和0.000025美元/步。e、 g.如果您对每天运行一次的AWS批处理使用10K步骤,您的价格将为每天0.25美元(每月7.5美元)。Airflow服务器(t2.2大型ec2 1年保留实例)的价格为每月41.98美元。无论哪种情况,我们都必须使用AWS批处理**
  • AWS批处理可以集成到和
  • 您可以在Apache Airflow中清除并重新运行失败的任务,但在Step函数中,您必须创建一个脚本来处理该任务。您也可以在步骤定义中处理函数
  • 对于步骤函数中的失败任务,单击时将获得失败状态的可视化表示和详细消息。您还可以使用aws cli或sdk获取详细信息
  • Step函数使用易于使用的JSON作为状态机定义,而Airflow使用Python脚本
  • Step函数支持,即状态机暂停,直到外部源通知其恢复。而气流具有这一特性
总的来说,我看到了使用AWS Step函数的更多优点。根据您的用例,您必须考虑这两种服务的维护成本和开发成本。 更新(针对Apache Airflow服务的AWS管理工作流):

  • *使用AWS管理的Apache Airflow服务工作流,您可以将Airflow服务的部署、维护、自动缩放/负载平衡和安全性卸载到AWS。但请考虑您愿意解决的版本号,因为AWS托管服务大多落后于最新版本。(例如,截至2021年3月8日,开源气流的最新版本为2.01,而MWAA允许版本1.10.12)
  • **MWAA在环境、实例和存储方面的成本
我在Airflow方面的轶事经验表明,10k并发任务只会扼杀
调度程序(事实上,2-3k并发任务就足够了);但在此之前,你会开始对相对缓慢的
flask
frontend(它不会自动刷新东西)感到恼火。从未探索过AWS Step函数,但可以给你我的2美分气流[1]不要创建单眼DAG(有数百个任务):尝试将DAG保持在<10个任务。也不要创建不必要的依赖项b/w任务:每个依赖项都会为计划程序添加额外的工作
[2]设计您的工作流(任务/操作员)以将气流用作纯编排器:任务应将繁重的工作(实际处理)委派给外部系统(气流/其工作人员运行的机器不同). 这样,您就可以独立于它触发的各种任务来扩展气流部署[3]保持DAG(以及其中的单个任务)是我觉得气流无法运行这么多并发任务的主要原因,因为
调度程序本质上是在轮询上工作的(定期检查可以运行哪些任务,然后运行它们)请检查利用AWS步骤的NetflixFunctions@sanjayr看起来像是误用了orchestrator。将处理拆分为子任务应该是处理框架的责任。例如,气流触发一个作业,而Spark on Glue或EMR将数据拆分为引擎盖下的任务,您应该只担心应用程序逻辑这是sti吗所有这些都适用于AWS管理的气流…?如果不适用,让我们更新答案here@NathanBenton谢谢你的指针,很快就会更新。@amsh如果我有5个sql查询,我想创建5个DAG,这样我就可以触发5个不同的sql操作,并检查它们是否失败,这样我就可以再次触发特定的DAG。我可以为或者每个DAG?我也可以为每个DAG设置重试。我可以在步骤中实现相同的功能吗?我记得如果我为sql查询创建一个DAG,那么如果一个失败,那么我必须再次重新启动整个DAG。这就是为什么我想为每个sql查询创建多个DAG,如果一个失败,则在继续下一个查询之前重试。请指导