在气流 DAG 中,什么决定了任务所在的层?

What determines the layer a task is in, in an airflow DAG?

如果我们查看 Airflow 中的示例 DAG,我们会看到(图形视图):

什么决定了任务 also_run_thisthis_will_skip 的位置?请注意,这 2 个任务在它们之前没有任何连接线,这意味着它们可以与 runme_0runme_1runme_2 放在同一层(第一组垂直任务) (使用我对 DAG 的明显错误假设)。

是他们的运行时间让他们和run_after_loop在同一层吗?

我正在查看此 DAG 的详细任务数据,但我没有看到 also_run_thisthis_will_skiprunme_0 在位置方面的任何区别:

这里是runme_0:

{
    "class_ref": {
        "class_name": "BashOperator",
         "module_path": "airflow.operators.bash"
    },
    "depends_on_past": false,
    "downstream_task_ids": ["run_after_loop"],
    "end_date": null,
    "execution_timeout": null,
    "extra_links": [],
    "owner": "airflow",
    "pool": "default_pool",
    "pool_slots": 1,
    "priority_weight": 1,
    "queue": "default",
    "retries": 0,
    "retry_delay": {
        "__type": "TimeDelta",
        "days": 0,
        "microseconds": 0,
        "seconds": 300
    },
    "retry_exponential_backoff": false,
    "start_date": "2021-06-17T00:00:00+00:00",
    "task_id": "runme_0",
    "template_fields": ["bash_command", "env"],
    "trigger_rule": "all_success",
    "ui_color": "#f0ede4",
    "ui_fgcolor": "#000",
    "wait_for_downstream": false,
    "weight_rule": "downstream"
}

这里是 also_run_this:

{
    "class_ref": {
        "class_name": "BashOperator",
        "module_path": "airflow.operators.bash"
    },
    "depends_on_past": false,
    "downstream_task_ids": ["run_this_last"],
    "end_date": null,
    "execution_timeout": null,
    "extra_links": [],
    "owner": "airflow",
    "pool": "default_pool",
    "pool_slots": 1,
    "priority_weight": 1,
    "queue": "default",
    "retries": 0,
    "retry_delay": {
        "__type": "TimeDelta",
        "days": 0,
        "microseconds": 0,
        "seconds": 300
    },
    "retry_exponential_backoff": false,
    "start_date": "2021-06-17T00:00:00+00:00",
    "task_id": "also_run_this",
    "template_fields": ["bash_command", "env"],
    "trigger_rule": "all_success",
    "ui_color": "#f0ede4",
    "ui_fgcolor": "#000",
    "wait_for_downstream": false,
    "weight_rule": "downstream"
}

如果同一层基于并行性(同一垂直层中的所有任务 运行 并行),这将是有意义的,但这需要对 运行 时间进行一些阈值处理,我在 DAG 或 TASK 信息中看不到任何此类可用数据。

事实上,查看树视图,它似乎显示 runme_0runme_1runme_2also_run_thisthis_will_skip 所有 运行同时宁:

根据@bruno-uy 的评论,图表视图似乎有 UI“问题”。绝对不是很直观。

检查runme_0runme_1runme_2also_run_thisthis_will_skip同时都运行后,我们可以说这是一个 UI “问题”,它们没有显示在同一“层”中。 Airflow 没有“层”的概念,所以基本上他们不能保证同时开始的任务是垂直对齐的。

可能是对 Airflow 的一个很好的改进,或者像你提到的 Sankey 那样添加另一个图表。