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

相关推荐
一条泥憨鱼1 小时前
【Kafka】零基础学习教程
java·分布式·学习·kafka
贾伟康4 小时前
【共创稿事节】HarmonyOS 7.0 HiTraceChain分布式调用链:从接入到生产验证
分布式·harmonyos·可观测性·调用链·hitracechain
NiceZack1 天前
Hadoop 部署全流程教程:从新装 CentOS 到伪分布式与完全分布式
hadoop·分布式·centos
傻啦嘿哟1 天前
分布式爬虫架构:Redis+Scrapy打造企业级爬虫系统
分布式·爬虫·架构
starzy19901 天前
Kafka请求进门口:Processor是怎么把请求读上来的
分布式·kafka
骑着蜗牛撵大象3272 天前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
德迅云安全-上官2 天前
德迅游戏盾:面向 TCP 业务的分布式云安全防护方案
分布式·tcp/ip·游戏
未秃头的程序猿2 天前
@ConditionalOnMissingBean 把我配好的 RabbitMQ 手动 ack 吃掉了
后端·rabbitmq
麻瓜code2 天前
分布式锁演进:从一个用户下两单,到 Redisson,我改了四版
分布式·wpf
skywalk81632 天前
hive —— 多机 AI Agent 协同的任务总线:分布式,多节点同时运行,保障不会宕机
人工智能·hive·分布式