【问题标题】:Dynamic TaskGroups vs Dynamic DAGs动态任务组与动态 DAG
【发布时间】:2021-07-15 14:03:47
【问题描述】:

假设我有一个任务流程:

T1 >> T2 >> T3

进程需要为一组id运行[1,2,3]:

process_run_with_id1

process_run_with_id2

process_run_with_id3

我可以创建具有多个任务组的单个 DAG,其中每个任务组代表要为 id 运行的任务集:

DAG = > TG_for_1, TG_for_2, TG_for_3

或多个 DAG

DAG_for_1 = t1 >> t2 >> t3

DAG_for_2 = t1 >> t2 >> t3  

DAG_for_3 = t1 >> t2 >> t3

除了视觉上的不同之外,这两种方法之间有什么区别(以及我是通过让文件创建 DAG 还是拥有多个 DAG 文件来动态创建 DAG)?

【问题讨论】:

    标签: airflow-scheduler airflow


    【解决方案1】:

    您可以通过跨 DAG 拆分任务或将它们连接到单个 DAG 来获得相同的结果,但这更多地是您定义结果的方式。 您也可以在一个文件中编写整个软件,但是将所有内容放在同一个文件中是否明智?可能不会。

    有一些规则可以帮助您区分添加任务组和创建单独的 DAG。

    支持将具有任务组的任务添加到当前 DAG 的要点:

    1. 任务是 DAG 的一个子单元。
    2. 组中的任务永远不能单独执行。执行始终是 DAG 本身的一部分。
    3. 这些任务与 DAG 共享相似/紧密的业务逻辑,因此在特定 DAG 中查找这些任务是有意义的。

    支持将任务从当前 DAG 分离到另一个 DAG 的要点:

    1. 任务可能需要与当前 DAG 分开运行。
    2. 任务代表一个单独的业务单元,它可能是独立的,也可能在当前 DAG 之后执行。
    3. 任务中的代码更改不需要对当前 DAG 进行任何额外更改。

    总的来说,我认为最重要的一点是,虽然任务组只是一个漂亮的 UI 表示。这意味着如果由于任何原因TG_for_1 将需要更长的时间来执行,它可能会导致调度新 DAG 运行的延迟,这意味着它不仅会影响TG_for_1 中的任务,还会影响后续运行的@987654323 的任务@ & TG_for_3 将被延迟。因此,只有在有意义的情况下,您才希望将任务“绑定”到同一个 DAG 中,如果它们将一起运行并在出现问题时一起“受苦”。

    【讨论】:

      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多