【发布时间】: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
如图所示: 气流在任务执行之间造成了太多时间?
它几乎代表了 DAG 执行时间的 30%。
我已将airflow.cfg 文件更改为:
job_heartbeat_sec = 1
scheduler_heartbeat_sec = 1
但我仍然有相同的延迟率。
为什么会这样?
【问题讨论】:
标签: python airflow directed-acyclic-graphs airflow-scheduler
这是设计使然。例如,我使用 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 了解更多信息),那么您应该首先解决这些问题。
如果您已经调整了调度程序心跳和工作线程的数量,但仍然发现调度延迟很高,那么您可能需要考虑使用更强大的机器。
【讨论】: