通过气流安排的芹菜任务之间的延迟

时间:2017-04-12 21:20:01

标签: celery airflow

我试图通过在Airflow中使用celeryExecutor来运行以下简单的工作流程:

default_args = {
    'depends_on_past': False,
    'start_date': datetime.now(),
}

dag = DAG('HelloWorld', default_args=default_args, schedule_interval=None)
default_args=default_args)

t1 = BashOperator(
    task_id='task_1',
    bash_command='echo "Hello World from Task 1"; sleep 0.1',
    dag=dag)
t2 = BashOperator(
    task_id='task_2',
    bash_command='echo "Hello World from Task 2"; sleep 0.2',
    dag=dag)
t2.set_upstream(t1)

但是,在task_1和task_2之间总是有大约5秒的延迟。以下是airflow.cfg快照:

[scheduler]
# Task instances listen for external kill signal (when you clear tasks
# from the CLI or the UI), this defines the frequency at which they should
# listen (in seconds).
job_heartbeat_sec = 0.1

# The scheduler constantly tries to trigger new tasks (look at the
# scheduler section in the docs for more information). This defines
# how often the scheduler should run (in seconds).
scheduler_heartbeat_sec = 1

看起来芹菜是导致延迟的因素,但是,如果是真的,如何设置来自气流配置或API的芹菜工作者心跳间隔(或汇集率)?

1 个答案:

答案 0 :(得分:4)

作为批量调度程序,Airflow目前还不能保证超低延迟。该项目的目标是尽可能大规模地进行亚分钟延迟,但在较大的环境中,这种情况可能会持续几分钟。

如果延迟大约是1分钟,那么执行1-2秒的任务链是没有意义的。通常,Airflow任务的持续时间应以分钟为单位,而不是以秒为单位(尽管有例外)。 Airflow不是亚马逊Lambda。

它可能可以进行微调并且可以说< = 5秒,但在扩展系统时,这将无法提供这些保证。