Amazon MWAA Airflow - 任务容器在没有日志的情况下关闭/停止/终止

tde*_*roc 5 amazon-web-services airflow mwaa

我们使用 Amazon MWAA Airflow,很少有任务标记为“FAILED”,但根本没有日志。就好像容器在我们没有注意到的情况下被关闭了一样。

我找到了这个链接: https://cloud.google.com/composer/docs/how-to/using/troubleshooting-dags#task_fails_without_emitting_logs 这由机器上的 OOM 解释。但我们的任务几乎不使用 CPU 和 RAM。他们只对 AWS API 进行 1 次 HTTP 调用。非常轻。

在 Cloudwatch 上,我可以看到同一容器上没有启动其他任务(DAG 运行通过打印容器 IP 启动,因此我可以在所有任务上搜索该 IP)。

如果有人有想法,那就太好了,谢谢!

小智 7

MWAA 使用 ECS 作为后端,其工作方式是 ECS 将根据集群中运行的任务数量自动缩放工作线程数量。对于小型环境,每个worker默认可以处理5个任务。如果任务超过 5 个,那么它将扩展另一个工作线程,依此类推。

我们不对气流进行任何计算(批量、长时间运行的作业),我们的 Dags 主要是对其他服务的 API 请求,这意味着我们的 Dags 运行速度快且寿命短。有时,我们可以在很短的时间内(几秒钟)完成八个或更多任务。在这种情况下,自动缩放将触发横向扩展并向集群添加工作人员。然后,由于这些任务只是 API 请求,因此它会很快执行,并且任务数量立即下降到 0,从而触发扩展(删除工作人员)。如果在那个时刻计划了另一个任务,那么气流最终将在被删除的容器上运行该任务,并且您的任务将在没有任何通知的情况下被终止(竞争条件)。发生这种情况时,您通常会看到不完整的日志。

第一个解决方法是通过冻结集群中的工作线程数量来禁用自动缩放。您可以将最小值和最大值设置为适当的工作人员数量,这取决于您的工作负载。我们同意,我们失去了服务的弹性。

$ aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 2
Run Code Online (Sandbox Code Playgroud)

AWS 建议的另一种解决方案是始终运行一个虚拟任务(无限循环),这样您就永远不会最终扩展所有工作线程。

AWS 告诉我们,他们正在研究一种改进执行器的解决方案。