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,
那基本等于"盲飞"。

相关推荐
ALex_zry21 小时前
Redis Cluster 分布式缓存架构设计与实践
redis·分布式·缓存
为什么不问问神奇的海螺呢丶1 天前
n9e categraf rabbitmq监控配置
分布式·rabbitmq·ruby
TTBIGDATA1 天前
【Atlas】Atlas Hook 消费 Kafka 报错:GroupAuthorizationException
hadoop·分布式·kafka·ambari·hdp·linq·ranger
m0_687399841 天前
telnet localhost 15672 RabbitMQ “Connection refused“ 错误表示目标主机拒绝了连接请求。
分布式·rabbitmq
陌上丨1 天前
生产环境分布式锁的常见问题和解决方案有哪些?
分布式
新新学长搞科研1 天前
【智慧城市专题IEEE会议】第六届物联网与智慧城市国际学术会议(IoTSC 2026)
人工智能·分布式·科技·物联网·云计算·智慧城市·学术会议
Ronin3051 天前
日志打印和实用 Helper 工具
数据库·sqlite·rabbitmq·文件操作·uuid生成
泡泡以安1 天前
Scrapy分布式爬虫调度器架构设计说明
分布式·爬虫·scrapy·调度器
没有bug.的程序员1 天前
RocketMQ 与 Kafka 深度对垒:分布式消息引擎内核、事务金融级实战与高可用演进指南
java·分布式·kafka·rocketmq·分布式消息·引擎内核·事务金融
上海锟联科技1 天前
250MSPS DAS 在地铁监测中够用吗?——来自上海锟联科技的工程实践
分布式·科技·分布式光纤传感·das解调卡·光频域反射·das