Airflow1.10.12中BranchPythonOperator历史任务跳过后续不运行问题
Airflow分支任务故障排查结论
核心故障根因
问题出在全局默认配置的wait_for_downstream=True参数,和Airflow 1.10.12版本的参数校验逻辑冲突:
wait_for_downstream参数的作用是:任务的上一调度周期实例的所有下游任务必须全部为成功状态,本次调度的对应任务才会启动运行。- 你虽然给分支任务
branch_task单独设置了depends_on_past=False,但没有覆盖wait_for_downstream参数,该参数继承了全局配置的True值。 - 当某次运行中Task A被跳过之后,上一次调度的
branch_task的下游Task A为skipped状态,不属于success状态,不满足wait_for_downstream的校验要求,因此后续所有调度的branch_task都会被卡住不执行,整个流程中止。
修复方案
- 优先移除全局
default_args中的wait_for_downstream: True配置,该参数属于强校验规则,仅适合给有强依赖要求的单个任务单独配置,不适合全局开启。 - 如果确实需要保留全局的
wait_for_downstream配置,可单独给branch_task覆盖该参数为False,修改后分支任务代码如下:
branch_task = BranchPythonOperator( task_id='branching', python_callable=check_condition, dag=dag, depends_on_past=False, wait_for_downstream=False, )
- 额外优化建议:如果Task B同时依赖
branch_task和Task A,当前默认的none_failed触发规则可以正常兼容上游任务跳过的场景,无需额外调整。
内容的提问来源于stack exchange,提问作者Nikita Jain
相关产品推荐
相关产品推荐

