【问题标题】:Airflow latency between tasks任务之间的气流延迟
【发布时间】:2018-09-28 20:47:43
【问题描述】:

如图所示: 气流在任务执行之间造成了太多时间? 它几乎代表了 DAG 执行时间的 30%。 我已将airflow.cfg 文件更改为:

job_heartbeat_sec = 1 
scheduler_heartbeat_sec = 1

但我仍然有相同的延迟率。

为什么会这样?

【问题讨论】:

    标签: python airflow directed-acyclic-graphs airflow-scheduler


    【解决方案1】:

    这是设计使然。例如,我使用 Airflow 执行大型工作流程,其中某些任务可能需要很长时间。 Airflow 不适用于需要几秒钟才能执行的任务,它当然可以用于此,但可能不是最合适的工具。

    话虽如此,您无能为力,因为您已经找到了要配置的关键设置。

    此外,您可能还想尝试增加调度程序的线程数:

       [scheduler]
       max_threads = 4
    

    这也可以通过设置环境变量来完成:

    AIRFLOW__SCHEDULER__MAX_THREADS=4
    

    但是不要指望延迟会减少那么多。

    【讨论】:

    • 嗨@Hito,为什么虽然它有很长的延迟(对我来说大约 30 秒)。 Airflow 不能这么快启动吗?
    • 嗨罗伯特,除了像在 OP 中那样应用较低的心跳外,我不知道有什么方法可以加快速度。但同样,如果您需要手动触发应尽快执行的任务(几秒钟内),也许 Airflow 不是适合这项工作的工具..
    【解决方案2】:

    30 秒对于任务间延迟来说是相当高的。在我见过的经过良好调整的环境中,一个任务和一个依赖任务之间大约 4-6 秒是一个相当合理的下限,即使对于有数千个 DAG 的环境也是如此。

    正如您已经说过的,增加调度程序心跳 (scheduler_heartbeat_sec) 和调度程序拥有的线程数 (scheduler.max_threads) 是减少调度延迟的最佳方法。如果您的任务在其他情况下被阻止(您可以查看日志;core.logging_level = DEBUG 了解更多信息),那么您应该首先解决这些问题。

    如果您已经调整了调度程序心跳和工作线程的数量,但仍然发现调度延迟很高,那么您可能需要考虑使用更强大的机器。

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 2022-09-30
      相关资源
      最近更新 更多