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

Amazon MWAA Airflow - Tasks container shut down / stop / killed without logs

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

我找到了这个 link: 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)。

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

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

我们不对气流进行任何计算(批处理,长时间 运行ning 作业),我们的 Dag 主要是 API 对其他服务的请求,这意味着我们的 Dag 运行速度快,寿命短。有时,我们可以在很短的时间内(几秒钟)激增到八个或更多任务。在这种情况下,自动缩放将触发向外扩展并向集群添加一个工作人员。然后,由于这些任务只是 API 请求,它执行得非常快,任务数量立即 下降到 0 ,这会触发规模缩减(删除工人) ).如果在那一刻安排了另一个任务,那么气流将 最终 运行 容器上的任务被删除,并且您的任务将在中间被杀死,恕不另行通知(比赛健康)状况)。发生这种情况时,您通常会看到不完整的日志。

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

$ aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 2

A​​WS 建议的另一种解决方案是始终拥有一个 dummy 任务 运行ning(无限循环),这样您就永远不会扩展所有工作人员。

A​​WS 告诉我们他们正在研究改进执行程序的解决方案。

所以在尝试了各种东西之后,他们的 boto 包也存在并发问题,解决它的最简单方法是让事情不是并发的。

所以 运行 他们最小的实例大小,只有 2 个 vcpus 的调度器(按照这个)不会有这个问题。

另一件事是设置 celery.sync_parallelism = 1

如果您是 运行 他们的中型或大型实例,两者都将解决没有日志的随机任务失败