Airflow 1.9.0 - 任务执行之间的长时间延迟

flu*_*off 7 airflow airflow-scheduler

我最近从v1.7.1.2升级到v1.9.0,升级后我注意到CPU使用率显着增加.在进行了一些挖掘之后,我将其跟踪到这两个调度程序配置选项:min_file_process_interval(默认为0)和max_threads(默认为2).

正如预期的那样,增加min_file_process_interval可以避免紧密循环并在空闲时丢弃CPU使用率.但我不明白为什么min_file_process_interval影响任务执行?

如果我将min_file_process_interval设置为60s,它现在在我的DAG中执行每个任务之间等待不少于60秒,所以如果我的dag有4个连续任务,它现在已经为我的执行时间增加了4分钟.例如:

start -> [task1] -> [task2] -> [task3] -> [task4]
        ^          ^          ^          ^
        60s        60s        60s        60s
Run Code Online (Sandbox Code Playgroud)

我在我的测试环境和prod env中设置了Airflow.这在我的生产环境中不是一个问题(虽然仍然有关),但对我的测试环境来说是个大问题.升级后,CPU使用率显着提高,因此我要么接受更高的CPU使用率,要么尝试使用更高的配置值来降低CPU使用率.但是,这为我的测试dags执行时间增加了大量时间.

为什么min_file_process_interval会影响DAG调度后的任务之间的时间?是否有其他配置选项可以解决我的问题?

tob*_*bi6 3

您可能想要研究的另一个选择是

SCHEDULER_HEARTBEAT_SEC
Run Code Online (Sandbox Code Playgroud)

此设置通常也设置为非常紧的间隔,但也可以稍微宽松一些。此设置结合

MAX_THREADS
Run Code Online (Sandbox Code Playgroud)

为我们成功了。开发机器的速度足够快,可以重新部署,但没有发热的 CPU,这很好。

  • 我和OP有类似的问题;这些设置没有帮助。我所拥有的只是 1 个微小的 DAG,其中有 1 个微小的任务!DagBag 填充时间为 0.004 秒。但调度程序在任务之间仍然延迟 40 秒以上。就我而言,我在超过 1000 天的时间内对任务进行了大量回填。每个任务需要 3 秒,然后 Airflow 旋转 40 秒什么也不做,然后安排第二天的回填。我不得不停止使用 Airflow,因为小任务的长期回填基本上已经被破坏了。 (2认同)