气流的“并行”和“dag_concurrency”有什么区别

Spa*_*Bot 9 python airflow

我不明白之间的差别dag_concurrencyparallelism。文档和这里的一些相关帖子在某种程度上与我的发现相矛盾。

我之前的理解是,该parallelism参数允许您设置气流中可能的全局(跨所有 DAG)TaskRundag_concurrency的最大数量,并表示单个 Dag 可能的 TaskRun 的最大数量。

所以我将 设置parallelism为 8 和dag_concurrency4 并运行一个 Dag。我发现它一次运行 8 个 TI,但我期望它一次运行 4 个。

  1. 这怎么可能?

  2. 此外,如果有帮助,我已将这些任务的池大小设置为 10 左右。但这应该无关紧要,因为“配置”参数的优先级高于池的优先级,对吗?

tre*_*jas 5

另一个答案只是部分正确:

dag_concurrency没有明确控制每个 worker 的任务。dag_concurrency 是每个 dag_run 同时运行的任务数。因此,如果您的 DAG 有一个地方可以同时运行 10 个任务,但您想限制工作人员的流量,您可以将 dag_concurrency 设置得更低。

queues 和 pools 设置也会影响每个 worker 的任务数。

当您开始构建同时运行的 DAG 的大型库时,这些设置非常重要。

并行度是所有工作线程和 DAG 的最大任务数。


Zac*_*ack 3

parallelism更好地视为max_active_tasks_total. 您将其设置为 8,表示“我只想在所有工作人员之间同时运行 8 个任务”。

dag_concurrency更好的是max_active_tasks_for_worker. 您将其设置为 4,表示“我只希望每个工作线程最多一次运行 4 个任务实例”。

因此,当您运行 dag 时,它在 2 个工作人员之间运行总共 8 个任务实例,每个工作人员运行 4 个任务。我认为你只是搞砸了dag_concurreny

这个答案部分取自这里的SO答案:SO答案