任务之间的气流延迟
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
以获取更多信息),那么您应该首先解决这些问题。
如果您已经调整了调度程序心跳和工作线程数,但您仍然看到高调度延迟,那么您可能需要考虑使用更强大的机器。
正如您在图片中看到的那样: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
以获取更多信息),那么您应该首先解决这些问题。
如果您已经调整了调度程序心跳和工作线程数,但您仍然看到高调度延迟,那么您可能需要考虑使用更强大的机器。