我试图通过在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的芹菜工作者心跳间隔(或汇集率)?
答案 0 :(得分:4)
作为批量调度程序,Airflow目前还不能保证超低延迟。该项目的目标是尽可能大规模地进行亚分钟延迟,但在较大的环境中,这种情况可能会持续几分钟。
如果延迟大约是1分钟,那么执行1-2秒的任务链是没有意义的。通常,Airflow任务的持续时间应以分钟为单位,而不是以秒为单位(尽管有例外)。 Airflow不是亚马逊Lambda。
它可能可以进行微调并且可以说< = 5秒,但在扩展系统时,这将无法提供这些保证。