任务之间的气流延迟

Airflow latency between tasks

正如您在图片中看到的那样:气流在任务执行之间占用了太多时间? 它几乎占 DAG 执行时间的 30%。 我已将 airflow.cfg 文件更改为:

job_heartbeat_sec = 1 
scheduler_heartbeat_sec = 1

但我的延迟率还是一样。

为什么会这样?

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

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

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

   [scheduler]
   max_threads = 4

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

AIRFLOW__SCHEDULER__MAX_THREADS=4

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

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

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

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