You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者채병훈

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:08:38