动态任务组与动态 DAG

时间:2021-07-15 14:03:47

标签: airflow airflow-scheduler airflow-operator airflow-worker

假设我有一个带有任务的流程:

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)?

1 个答案:

答案 0 :(得分:0)

您可以通过跨 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 中的任务,还会影响以下任务TG_for_2TG_for_3 的运行将被延迟。因此,您希望将任务“绑定”到同一个 DAG 中,前提是它们可以一起运行并在出现问题时一起“受苦”。

相关问题