Airflow ExternalTaskSensor任务已排队未执行问题排查求助
Airflow ExternalTaskSensor 调度后未执行问题排查(EKS Spot节点环境)
环境背景
- Kubernetes(EKS)部署Airflow,采用Kubernetes Pod Executor
- 使用Spot节点,任务Pod可能因Spot节点限制收到SIGTERM信号
- 偶尔出现ExternalTaskSensor任务已被调度但未执行的异常情况
调度器日志信息
[2024-03-20T09:06:01.339+0000] {base_executor.py:279} INFO - queued but still running; attempt=10 task=TaskInstanceKey(dag_id='mart_kids_report_daily_10min', task_id='sensor_json_10min', run_id='scheduled__2024-03-20T08:50:00+00:00', try_number=1, map_index=-1) [2024-03-20T09:06:02.833+0000] {base_executor.py:282} ERROR - could not queue task TaskInstanceKey(dag_id='mart_kids_report_daily_10min', task_id='sensor_json_10min', run_id='scheduled__2024-03-20T08:50:00+00:00', try_number=1, map_index=-1) (still running after 10 attempts)
问题现象
- 调度器已将任务放入队列,任务被移出队列准备执行,但在集群中找不到该任务的执行Pod记录
- 甘特图显示该传感器任务无限期处于未运行状态
补充信息
- Airflow版本:2.7.3
- ExternalTaskSensor配置:
sensor_source = ExternalTaskSensor(task_id='sensor_json_10min', dag=dag, external_dag_id='mart_json_10min', external_task_id='merge_cluster', execution_date_fn=lambda y: y, mode='reschedule')
可能的原因及排查方向
1. Spot节点回收导致任务状态不一致
当Spot节点被云服务商回收时,运行中的Sensor任务Pod会收到SIGTERM信号,若Pod被强制销毁而未完成状态清理:
- Airflow元数据库中该任务实例的
state可能仍标记为running,但实际Pod已不存在 - 调度器尝试重新队列任务时,检测到任务状态为
running,因此拒绝再次调度 - 排查动作:
- 查看EKS集群的节点事件,确认异常时间段是否有Spot节点被回收的记录
- 直接查询Airflow元数据库的
task_instance表,检查该任务的state、start_date、end_date字段值
2. Reschedule模式下的状态同步延迟
ExternalTaskSensor使用mode='reschedule'时,调度器会周期性取消当前任务Pod并重新调度新的Pod:
- 若Spot节点回收恰好发生在任务取消到重新调度的窗口,可能导致元数据状态更新不及时
- 调度器的状态检测逻辑(base_executor.py中的判断)会误判任务仍在运行,无法发起新的调度
- 排查动作:
- 查看Airflow调度器的详细日志,追踪该任务的状态变更流程,确认是否存在状态更新延迟
- 对比任务Pod的销毁时间与元数据库中任务状态的更新时间是否匹配
3. Kubernetes Pod Executor的任务状态更新缺陷
Kubernetes Pod Executor在处理Pod销毁事件时,若节点被强制回收,可能来不及捕获Pod的终止状态并同步到Airflow元数据库:
- 导致调度器持续认为任务处于
running状态,无法触发重新调度 - 排查动作:
- 查看Airflow Executor的日志,确认是否存在Pod销毁后状态更新失败的报错
- 手动删除一个处于
running状态的Sensor任务Pod,观察元数据库中任务状态是否能正确更新为failed或up_for_reschedule
4. Airflow 2.7.3版本的已知问题
Airflow 2.7.x版本在Kubernetes Pod Executor结合Reschedule模式的场景下,存在部分状态同步的bug:
- 部分用户反馈类似的任务卡住问题,后续版本已修复相关缺陷
- 排查动作:
- 查看Airflow官方release notes,确认2.7.4及后续版本是否有针对该场景的修复
- 临时将Sensor的
mode改为poke,验证问题是否消失(若消失则说明与Reschedule模式的实现相关)
内容的提问来源于stack exchange,提问作者채병훈
相关产品推荐
相关产品推荐

