正如您在图像中看到的那样:气流在任务执行之间花费了太多时间?
它几乎占DAG执行时间的30%。
我已将airflow.cfg
文件更改为:
job_heartbeat_sec = 1
scheduler_heartbeat_sec = 1
但我的延迟率仍然相同。
为什么它会这样?
答案 0 :(得分:7)
这是设计的。例如,我使用Airflow执行大型工作流程,其中某些任务可能需要很长时间。气流不适用于需要几秒钟执行的任务,它当然可以用于那个但可能不是最合适的工具。
据说,由于您已经找到了要配置的密钥设置,因此您无能为力。
此外,您可能希望尝试增加调度程序的线程数:
[scheduler]
max_threads = 4
也可以通过设置环境变量来完成:
AIRFLOW__SCHEDULER__MAX_THREADS=4
但是,不要指望减少那么多的延迟。
答案 1 :(得分:1)
对于任务间延迟,三十秒相当高。在我看到的经过良好调整的环境中,即使对于具有成千上万个DAG的环境,任务与从属任务之间的间隔约4-6秒也是一个相当合理的下限。
正如您已经说过的那样,增加调度程序心跳(scheduler_heartbeat_sec
)和调度程序具有的线程数(scheduler.max_threads
)是减少调度延迟的最佳方法。如果您的任务在其他条件下被阻止(您可以在日志中查看; core.logging_level = DEBUG
以获得更多信息),那么您应该首先解决这些问题。
如果您既调整了调度程序的脉动信号,又调整了工作线程的数量,但仍然看到较高的调度延迟,那么您可能需要考虑使用功能更强大的计算机。