Airflow 2.4.0 UI出现幽灵DAG Runs问题求助
幽灵DAG Runs问题分析与解决
这些条目是什么?
这是Airflow 2.3.x升级到2.4.x版本时的已知UI缓存/元数据同步BUG,根源在于:
- 升级后Webserver的本地缓存未自动失效,导致显示了早已被清理或从未真正写入数据库的DAG Run记录
- 2.4.0版本对DAG Run状态跟踪逻辑做了调整,UI层残留了旧的状态数据
- 调度器与Webserver之间的元数据同步延迟,导致两边状态不一致
清除步骤(按顺序执行)
1. 清空Webserver缓存
Webserver会缓存DAG相关数据,直接清理缓存并重启:
# 停止Webserver(根据部署方式调整命令,如systemd或docker) systemctl stop airflow-webserver # 删除缓存目录(默认路径,部署路径不同需修改) rm -rf /usr/local/airflow/webserver_cache/* # 重启Webserver systemctl start airflow-webserver
2. 用CLI刷新元数据+清理无效条目
通过Airflow命令行工具强制同步元数据,并清理数据库中不存在的DAG Run:
# 刷新所有DAG的元数据 airflow dags refresh # 清理无效DAG Run(--skip-archive表示直接删除,无需归档,按需使用) airflow db clean --verbose --skip-archive --dag-ran-only
3. 重启调度器
如果问题仍存在,重启调度器让它重新同步数据库状态:
systemctl stop airflow-scheduler systemctl start airflow-scheduler
可查看调度器日志排查同步报错:
tail -f /var/log/airflow/scheduler.log
4. 直接操作数据库(极端情况)
前面方法无效时,直接清理数据库里的UI缓存表(以PostgreSQL为例,其他数据库语法类似):
-- 清空DAG状态缓存表 TRUNCATE TABLE dag_stat; -- 删除没有对应任务实例的DAG Run条目 DELETE FROM dag_run WHERE run_id NOT IN (SELECT run_id FROM task_instance GROUP BY run_id);
重要:操作数据库前务必备份!执行完重启所有Airflow组件。
后续预防
- 升级Airflow时,先停掉所有组件(Webserver、Scheduler、Worker),执行
airflow db upgrade完成迁移后再重启 - 定期清理Webserver缓存目录,避免旧数据堆积
- 尽量升级到2.4.x的补丁版本(如2.4.3及以上),官方已修复部分元数据同步问题
内容的提问来源于stack exchange,提问作者MrBronson
相关产品推荐
相关产品推荐

