Airflow 动态 DAG 的处理时间会影响 Executor/Workers 还是仅影响 Scheduler?

问题描述 投票:0回答:1

我知道进行数据库调用等繁重处理来动态生成 DAG 会对调度程序性能产生负面影响,但我找不到明确的文档来解释它是否以及如何影响 Executor 或 Workers。我正在尝试找出我的基础执行器中 CPUUtilization 峰值的根本原因。

我看到许多关于影响调度程序的顶级 DAG 代码中的繁重处理的参考资料,但唯一表明它可能影响工作人员的地方是这里:https://www.gotenzo.com/resources/insight/lessons-learned- from-airflow-2-0/ 当提到工人时

导入“DagBag”,其中涉及导入这些文件,以及 这些 DAG 文件的处理每秒可能会发生多次

但我不完全理解其中的细节,也没有看到任何其他提及这对工人有显着影响的内容。

我的问题可以帮助我更好地理解:

  • “导入 DagBag”对于任务意味着什么以及工作人员需要多久执行一次?
  • 它只是导入文件还是运行所有顶级代码(包括数据库调用)?
  • 为什么它会“每秒发生多次”?
  • 工作人员实际上会导入所有 DAG 文件只是为了运行一个文件还是只导入一个?如果它只导入一个文件,这真的会导致性能问题吗?
amazon-web-services airflow celery directed-acyclic-graphs mwaa
1个回答
0
投票

是的,工作人员还必须解析 DAG 以了解任务是什么

这里有一个示例,解释了 Kubernetes 执行器文档中的基本原理

与常规 Airflow 架构一致,Workers 需要访问 DAG 文件才能执行这些 DAG 中的任务并与元数据存储库交互。此外,还需要在 Airflow 配置文件中指定 Kubernetes Executor 特有的配置信息,例如 Worker 命名空间和镜像信息。

解决您的问题:

“导入 DagBag”对于任务意味着什么以及工作人员需要多久执行一次?

我相信无论是哪个执行者,每个任务都会通过cli命令

airflow tasks run
来执行(例如,在KubernetesExecutor中看到这一点,它执行了task_run函数。为了真正让任务到运行,这个函数需要先获取DAG。每个任务都会运行一次。

它只是导入文件还是运行所有顶级代码(包括数据库调用)?

它将运行所有顶级代码。

为什么它会“每秒发生多次”?

特别是关于你引用另一个来源的问题......我不确定。调度程序上的 DAG 解析每隔 min-file-process-interval 进行一次。每次任务执行时,它都会在工作线程上发生一次。

worker 实际上会导入所有 DAG 文件只是为了运行一个文件还是只导入一个?如果它只导入一个文件,这真的会导致性能问题吗?

就这一个。不,它不会预期会导致性能问题,但如果 DAG 正在执行成本高昂的顶级 DAG 代码,那么它绝对可能会导致严重的性能问题。

此外,“导入”在这里可能不是正确的词。 “解析”更准确,因为文件 并不是真正通过

from <dags folder> import <dag object>
导入的。

© www.soinside.com 2019 - 2024. All rights reserved.