Airflow 3.1 CeleryExecutor任务卡在队列无法执行问题求助
Airflow 3.1 CeleryExecutor任务卡在队列不执行排查方案
核心排查方向
以下是针对Docker Compose环境下任务卡队列问题的逐一验证步骤:
1. 确认队列监听一致性
Airflow默认将任务发送至default队列,需确保:
- 调度器容器的
AIRFLOW__CELERY__DEFAULT_QUEUE配置与worker完全一致(默认均为default,若自定义过队列需同步配置) - 若DAG中任务指定了非默认队列(如
task = PythonOperator(..., queue='order_queue')),需修改worker启动命令为celery worker -Q default,order_queue,确保worker监听对应队列
2. 验证Redis连通性与任务队列状态
进入worker容器执行命令,确认任务是否真的进入队列:
# 测试Redis连接可用性 redis-cli -h redis ping # 查看Celery队列中的任务数量 redis-cli -h redis llen celery
- 若
llen celery返回大于0的数值,说明任务已进入队列但worker未消费;若返回0,说明调度器未将任务推送至队列,需排查调度器配置
3. 检查PostgreSQL结果后端连接
进入worker容器测试Postgres连接权限:
psql -h postgres -U airflow -d airflow
输入密码airflow后,若能正常进入数据库则连接正常;若报错,需检查Postgres的用户权限、容器网络映射或端口配置
4. 确保全局配置一致性
调度器、webserver、worker的核心配置必须完全同步,尤其是以下项:
AIRFLOW__CORE__EXECUTOR=CeleryExecutor AIRFLOW__CELERY__BROKER_URL=redis://redis:6379/0 AIRFLOW__CELERY__RESULT_BACKEND=db+postgresql://airflow:airflow@postgres/airflow
进入任意容器执行airflow config list,确认上述配置未被本地airflow.cfg文件或其他环境变量覆盖
5. 排查元数据库任务状态
进入Postgres容器查询任务实例状态:
SELECT task_id, state, queue, executor FROM task_instance WHERE state = 'queued';
需确认:
executor字段值为CeleryExecutorqueue字段与worker监听的队列完全匹配
6. 检查调度器日志
调度器负责推送任务至队列,重点查看日志中是否存在:
- 任务调度成功的日志(如
Sent task <task_id> to queue <queue_name>) - Redis/Postgres连接报错(如认证失败、连接超时)
内容的提问来源于stack exchange,提问作者Aneeta Karan
相关产品推荐
相关产品推荐

