【问题标题】:Which is more performant: creating 1000+ DAGs or 1 DAG w/ 1000+ tasks?哪个性能更高:创建 1000+ DAG 或 1 DAG w/1000+ 任务?
【发布时间】:2021-06-11 14:55:47
【问题描述】:

我有一个 Apache Airflow DAG,它获取股票代码的数据并将其加载到数据湖中。有数以千计的股票代码。

现在我正在使用模板为每个股票代码创建一个 DAG。我想知道创建单个 DAG 并拥有数千个任务是否会更高效。

我尝试使用只有 500 个股票代码的单个 DAG 和多个任务,但 Airflow UI 开始变得无法响应加载图表视图(仅供参考,我的工作机器有 64GB 内存)。

如果一个包含数千个符号的工作流创建 1000 多个 DAGS 或任务,我真的需要遵循最具可扩展性的做法,因为将来会添加更多工作流。

感谢您的帮助!

【问题讨论】:

  • 我会选择一个包含所有任务的 DAG。为了改善 UI 体验,您可以按 10/20 或似乎可行的方式将它们分组到任务组(在 Airflow 2.0 中)。每个符号有一个 dag 听起来不可维护,但从 2.0 的性能角度来看,这应该不会对调度产生太大影响。
  • 任务组是要走的路。谢谢你。如果您将您的评论提升为我会批准的答案。

标签: airflow


【解决方案1】:

为了改善 UI 体验,您可以在 10/20 之前将任务分组到 task groups(在 Airflow 2.0 中)或似乎可行的情况。每个符号有一个 dag 听起来不可维护,但从 2.0 的性能角度来看,这应该不会对调度产生太大影响。

【讨论】:

    【解决方案2】:

    除非您需要在逻辑上分离每个符号的任务,否则我认为修改您当前的运算符以接受符号列表并在运算符中使用一些并发来加快速度会很好。通过这种方式,它在未来将变得容易且易于管理,因为您可以决定需要启动多少工作作业才能完成管道,而不会导致 UI 上的大量负载来可视化所有任务。

    【讨论】:

    • 虽然它可能会起作用,但这不是最佳模式,因为在失败的情况下,当您重新运行任务时,您将再次摄取所有数据。建议让 Airflow 中的任务尽可能原子化。
    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多