需要上下文限制的建筑气流DAG

问题描述 投票:5回答:1
  • 我有一组要作为DAG运行的工作单位(工人)
  • Group1有10个工作程序,每个工作程序从一个数据库中提取多个表。请注意,每个工作程序都映射到一个数据库实例,每个工作程序需要成功处理总共100个表,然后才能成功将其标记为完成。
  • Group1有一个限制,即在所有这10名工作人员中,一次最多只能使用5张桌子。例如:
    • Worker1正在提取2个表
    • Worker2正在提取2个表
    • Worker3正在提取1个表
    • Worker4 ... Worker10需要等待,直到Worker1 ... Worker3放弃线程
    • Worker4 ... Worker10可以在步骤1中的线程释放后立即拾取表
    • 每个工作人员完成所有100张桌子后,无需等待就进入步骤2。 Step2没有并发限制

我应该能够创建一个单一的节点Group1,以满足节流并且还具有

  • 10个独立的工作节点,因此如果其中任何一个失败,我可以重新启动它们
  • 我已经尝试在下图中对此进行解释:enter image description here

  • [如果任何一个工作程序失败,我可以在不影响其他工作程序的情况下重新启动它。它仍然使用与Group1相同的线程池,因此强制执行并发限制
  • 一旦完成步骤1和步骤2的所有元素,Group1将完成
  • Step2没有任何并行措施
  • 我如何在Spring Boot Java应用程序的Airflow中实现这种层次结构?是否可以使用Airflow构造设计这种DAG,并动态地告诉Java应用程序一次可以提取多少张表。例如,如果除Worker1之外的所有worker都已完成,Worker1现在可以使用所有5个可用线程,而其他所有线程将继续执行step2。

我有一组要作为DAG Group1运行的作业单元(工人),它有10个工人,每个工人从数据库中提取多个表。请注意,每个工作程序都映射到单个数据库实例,并且...

java multithreading etl airflow airflow-scheduler
1个回答
0
投票

这些约束不能建模为有向无环图,因此不能完全按照所描述的那样在气流中实现。但是,它们可以建模为队列,因此可以使用作业队列框架来实现。这是您的两个选项:

© www.soinside.com 2019 - 2024. All rights reserved.