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

时间:2019-04-17 08:02:39

标签: python airflow

我无法理解dag_concurrencyparallelism之间的区别。文档和此处的一些相关帖子在某种程度上与我的发现相矛盾。

我之前的理解是,parallelism参数允许您设置气流中可能的全局(跨所有DAG)TaskRun的最大数量,而dag_concurrency则意味着一只Dag。

因此,我将parallelism设置为8,将dag_concurrency设置为4,并运行了一个Dag。我发现它一次运行8个TI,但我希望它一次运行4个。

  1. 那怎么可能?

  2. 此外,如果有帮助,我将这些任务的池大小设置为10左右。但这没关系,因为“ config”参数的优先级高于池的优先级,对吧?

2 个答案:

答案 0 :(得分:1)

其他答案仅部分正确:

dag_concurrency 不会显式控制每个工作人员的任务。 dag_concurrency是每个dag_run同时运行的任务数。因此,如果DAG具有可以同时运行10个任务的位置,但又想限制对工作人员的访问量,则可以将dag_concurrency设置得较低。

队列和池设置还影响每个工作人员的任务数。

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

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

答案 1 :(得分:0)

parallelism最好看成max_active_tasks_total。您将其设置为8,表示“我只希望一次在所有工作人员之间同时运行8个任务”。

dag_concurrencymax_active_tasks_for_worker更好。您将其设置为4,表示“我只希望每个工作人员一次最多运行4个任务实例”。

因此,当您运行dag时,它在2个2个worker之间运行了总共8个任务实例,每个worker运行4个任务。我认为您只是被dag_concurreny弄糊涂了。

此答案部分取自以下SO答案:SO Answer