我无法理解dag_concurrency
和parallelism
之间的区别。文档和此处的一些相关帖子在某种程度上与我的发现相矛盾。
我之前的理解是,parallelism
参数允许您设置气流中可能的全局(跨所有DAG)TaskRun的最大数量,而dag_concurrency
则意味着一只Dag。
因此,我将parallelism
设置为8,将dag_concurrency
设置为4,并运行了一个Dag。我发现它一次运行8个TI,但我希望它一次运行4个。
那怎么可能?
此外,如果有帮助,我将这些任务的池大小设置为10左右。但这没关系,因为“ config”参数的优先级高于池的优先级,对吧?
答案 0 :(得分:1)
其他答案仅部分正确:
dag_concurrency 不会显式控制每个工作人员的任务。 dag_concurrency是每个dag_run同时运行的任务数。因此,如果DAG具有可以同时运行10个任务的位置,但又想限制对工作人员的访问量,则可以将dag_concurrency设置得较低。
队列和池设置还影响每个工作人员的任务数。
当您开始构建同时运行的DAG的大型库时,这些设置非常重要。
并行度是所有工作人员和DAG的最大任务数。
答案 1 :(得分:0)
parallelism
最好看成max_active_tasks_total
。您将其设置为8,表示“我只希望一次在所有工作人员之间同时运行8个任务”。
dag_concurrency
比max_active_tasks_for_worker
更好。您将其设置为4,表示“我只希望每个工作人员一次最多运行4个任务实例”。
因此,当您运行dag时,它在2个2个worker之间运行了总共8个任务实例,每个worker运行4个任务。我认为您只是被dag_concurreny
弄糊涂了。
此答案部分取自以下SO答案:SO Answer