已配置Redis为Celery后端 为何Flower需单独生成持久化文件存储历史任务
Flower 读取Celery历史任务问题解答
为什么Flower会生成专属持久化文件,而非直接读取Redis后端记录
- Celery的Redis结果后端仅存储已完成且配置了保留结果的任务的最终状态数据,不会记录任务全生命周期的流转信息(比如待调度状态、执行中进度、撤销操作记录、worker节点关联的任务变更、队列历史负载数据等),而这些全量监控数据是Flower的核心功能依赖
- Flower默认把采集到的所有Celery事件存在进程内存中,重启就会丢失,
--persistent参数的作用是把内存中的全量监控数据落地到本地文件,实现Flower进程重启后仍能恢复历史监控数据,和Celery结果后端的存储定位完全不同 - Celery结果后端的任务记录默认有过期时间(由
result_expires配置控制,默认值为1天),过期后会自动删除,而Flower的专属持久化文件不受Celery配置限制,可以自定义保留时长
配置Flower从Redis后端拉取历史任务的方法
无需启用--persistent参数,按以下步骤配置即可:
- 首先确认Celery侧的配置符合要求:
# Celery 实例配置示例 app = Celery( 'your_task_app', broker='amqp://guest@localhost:5672//', # 你的RabbitMQ broker地址 backend='redis://localhost:6379/0' # 你的Redis后端地址 ) # 以下为必须配置项 app.conf.task_track_started = True # 开启任务启动状态跟踪,否则Flower无法获取执行中的任务状态 app.conf.result_expires = 3600 * 24 * 7 # 按需设置任务结果保留时长,单位为秒,示例为保留7天 # 不要给全局任务设置ignore_result=True,否则对应任务的结果不会存入Redis后端
- 启动Flower时指定关联的Celery实例,开启事件监听即可,Flower会自动读取Celery配置的Redis后端拉取历史任务:
# 启动命令示例,替换your_task_app为你自己的Celery实例模块名 celery -A your_task_app flower --task_events --port=5555
注意:如果部分任务显式配置了
ignore_result=True,这类任务的记录不会存入Redis后端,Flower也无法拉取到对应历史。
内容的提问来源于stack exchange,提问作者supersick
相关产品推荐
相关产品推荐

