RabbitMQ 中 Ready 和 Unacked 到底是什么意思?如何用它们判断系统是否健康

文章目录

在使用 RabbitMQ 的过程中,很多人都会在管理控制台看到两个指标:

  • Ready
  • Unacked

它们看起来很简单,但真正理解并用好这两个指标,是判断 RabbitMQ 是否健康、是否存在性能瓶颈的关键


一、一句话理解 Ready 和 Unacked

在 RabbitMQ 中,队列里的消息大致会经历三个阶段:

复制代码
生产 → 进入队列 → 投递给消费者 → 被 ack

对应到指标上:

指标 含义
Ready 已经在队列中,但还没投递给消费者的消息
Unacked 已经投递给消费者,但**还没被确认(ack)**的消息

Ready 看的是:消费速度是否跟得上生产速度
Unacked 看的是:消费者是否处理得过来


二、Ready:判断是否"发生积压"的核心指标

1. Ready 是什么?

Ready 表示当前队列中"等待被消费"的消息数量

这些消息已经:

  • 被 Producer 成功发送
  • 被 RabbitMQ 接收并放入队列
  • 但还没有被分发给任何 Consumer

2. Ready 持续增长,意味着什么?

最常见的情况是:

复制代码
生产速度 > 消费速度

此时你会看到:

  • Ready 数量不断增加
  • 队列开始出现积压

这通常说明:

  • 消费者数量不足
  • 单个消费者处理太慢
  • 或系统已经接近极限

3. Ready 的健康状态判断

Ready 状态 含义
接近 0,轻微波动 系统健康
缓慢上升 接近瓶颈
持续快速上升 已超出消费能力

👉 在压测时,Ready 是最重要的观察指标,没有之一。


三、Unacked:反映消费者压力的指标

1. Unacked 是什么?

Unacked 表示已经投递给消费者,但消费者还没有返回 ack 的消息数量

出现 Unacked,通常说明:

  • 使用的是手动 ack
  • 或者使用了批量 ack
  • 消费者正在处理消息

2. Unacked 很高,一定是问题吗?

不一定。

Unacked 高,常见有两种原因:

情况一:消费者处理慢(问题)

  • 业务逻辑耗时
  • IO 阻塞(数据库、HTTP)
  • CPU 已打满

这种情况下,Unacked 会持续增长


情况二:prefetch 设置过大(非问题)

RabbitMQ 会根据 prefetch 参数,一次性向消费者推送多条消息。

例如:

复制代码
prefetch = 1000

消费者瞬间拿到 1000 条消息,此时:

  • Unacked 很高
  • 但会稳定在一个区间内

👉 这不一定是瓶颈,而是配置行为。


3. Unacked 的健康状态判断

Unacked 状态 含义
稳定在一个固定区间 正常
持续增长 消费者处理不过来
大幅抖动 消费逻辑不稳定

四、Ready + Unacked 组合判断

单独看 Ready 或 Unacked 都不够,真正有价值的是"组合判断"

Ready Unacked 系统状态
0 系统健康
消费者数量不足
0 消费慢 / prefetch 偏大
系统已超载
0 0 无生产或无消费

这是在压测和生产环境中,快速判断系统状态的黄金法则


五、压测中的真实案例说明

场景一:Ready 持续增长,Unacked 很小

说明:

  • 消费者很快 ack
  • 但数量不够

👉 解决方案:增加消费者数量


场景二:Unacked 很大,Ready 为 0

说明:

  • RabbitMQ 已经把消息都推给了消费者
  • 消费者正在处理

👉 重点检查 prefetch 是否过大


场景三:Ready 和 Unacked 一起增长

这是最危险的情况:

  • 队列开始堆积
  • 消费者也处理不过来

👉 说明已经超过系统能力上限


六、经验建议

对于手动 ack 的普通业务场景

text 复制代码
prefetch ≈ 消费线程数 × 2 ~ 5

例如:

  • 消费线程数 = 10
  • prefetch = 20 ~ 50

这样可以避免 Unacked 过高,同时保证吞吐。


七、总结

  • Ready 反映的是:消息是否在队列中堆积
  • Unacked 反映的是:消费者是否有处理压力
  • 两者结合,才能准确判断 RabbitMQ 是否健康

如果你在压测或生产环境中,只看 TPS、不看 Ready / Unacked,
那基本等于"盲飞"。

相关推荐
若水不如远方4 小时前
分布式一致性(六):拥抱可用性 —— 最终一致性与 Gossip 协议
分布式·后端·算法
睡醒的土豆6 小时前
解决 Kafka 管理工具中文乱码问题
分布式·kafka
SuniaWang9 小时前
《Spring AI + 大模型全栈实战》学习手册系列· 专题二:《Milvus 向量数据库:从零开始搭建 RAG 系统的核心组件》
java·人工智能·分布式·后端·spring·架构·typescript
Hui Baby9 小时前
TIDB分布式数据库提交设想
数据库·分布式·tidb
⑩-10 小时前
RabbitMQ 架构和工作原理?RabbitMQ 延迟队列如何实现?
java·分布式·架构·rabbitmq
国冶机电安装10 小时前
分布式控制系统(DCS)安装:从方案设计到投运验收的完整指南
分布式
飞Link11 小时前
告别 ROS 的臃肿:用 ZeroMQ 构建极速具身智能分布式大脑(附 Python 实战)
开发语言·分布式·python
会算数的⑨11 小时前
演进——从查日志到 AI 自治,企业监控体系的变迁
人工智能·分布式·后端·微服务·云原生
一叶飘零_sweeeet12 小时前
分布式权限体系破局:统一认证授权与 OAuth2.0 全链路架构落地实战
分布式·架构
七夜zippoe13 小时前
消息队列选型:Kafka vs RabbitMQ vs Redis 深度对比
redis·python·kafka·消息队列·rabbitmq