MWAA Airflow Scaling:当我不得不 运行 频繁且耗时的脚本时我该怎么办? (Negsignal.SIGKILL)

MWAA Airflow Scaling: what do I do when I have to run frequent & time consuming scripts? (Negsignal.SIGKILL)

我的 AWS 账户中有一个 MWAA Airflow 环境。我设置的DAG应该从S3 bucket A中读取大量数据,过滤我想要的并将过滤后的结果转储到S3 bucket B。它需要每分钟读取一次,因为数据每分钟都会进来。每个 运行 处理大约 200MB 的 json 数据。

我的初始设置是使用 env class mw1.small 和 10 台工作机器,如果我在此设置中只 运行 任务一次,完成每个 运行 大约需要 8 分钟 运行,但是当我开始每分钟 运行 的计划时,大多数无法完成,开始花费更长的时间到 运行(大约 18 分钟)并显示错误消息:

[2021-09-25 20:33:16,472] {{local_task_job.py:102}} INFO - Task exited with return code Negsignal.SIGKILL

我尝试将 env class 扩展到 mw1.large 有 15 个工人,在错误出现之前可以完成更多的工作,但仍然赶不上每分钟摄取的速度. Negsignal.SIGKILL 错误在达到 worker 机器最大值之前仍然会显示。

此时,我应该怎么做才能缩放呢?我可以想象打开另一个 Airflow 环境,但这并没有什么意义。必须有一种方法可以在一个环境中完成。

我找到了解决方案,对于 MWAA,编辑环境并在 Airflow configuration options 下设置这些配置

  1. celery.sync_parallelism = 1
  2. celery.worker_autoscale = 1,1

这将确保您的 worker 机器一次运行 1 个作业,防止多个作业共享 worker,从而节省内存并减少运行时间。