MQ消息积压是分布式系统常见问题,资深后端工程师教你如何快速定位和处理。本文详细解析消息积压的5步排查法,包括监控指标分析、消费者线程检查等核心技巧。提供6种急救方案:消费者扩容、批量处理优化、死信队列转移等实战策略,并分享生产环境中的容量预估和熔断设计经验。适合Java开发者学习高并发场景下的消息队列优化,包含RabbitMQ和Kafka的具体命令示例。通过面试鸭返利网获取更多面试题库资源,掌握系统性能调优的关键技术点,提升分布式系统架构能力。
📁 2025年Java面试宝典网盘地址:
🔵 链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g 提取码: 9b3g
大家好,我是十年后端老司机。最近在面试鸭返利网帮同学模拟面试时,MQ消息积压几乎是必考题!今天结合真实生产案例,说透消息积压的排查逻辑和解决方案,面试时直接套用!
消息积压不是简单的“消费慢”——它会导致:
# RabbitMQ
rabbitmqctl list_queues name messages_ready messages_unacknowledged
# Kafka
kafka-consumer-groups.sh --describe --group my-group
messages_ready
> 1000 ➜ 积压警报!lag
(消费滞后量)持续增长 ➜ 消费者出问题| 现象 | 问题方向 |
|---------------------|------------------|
| 所有Topic都积压 | 消费者集群故障 |
| 单个Topic突发积压 | 生产者流量激增 |
| 特定Partition积压 | 消费者负载不均 |
💡 面试技巧:说出“查过GC日志”直接加分!
// Spring Boot快速扩容示例
@Bean
public ConcurrentKafkaListenerContainerFactory kafkaFactory() {
factory.setConcurrency(6); // 原为2,直接翻3倍!
}
注意:
临时关闭非关键操作:
// 伪代码:跳过积分计算逻辑
if (!isEmergencyMode) {
userService.addPoints(userId); // 直接注释掉
}
单条处理 → 批量处理:
@KafkaListener(topics = "order_topic", batch = "true")
void handleBatch(List<Order> orders) {
// 一次插入100条 vs 100次插入1条
orderDao.batchInsert(orders);
}
性能提升10倍+!
把积压消息转移到新队列:
# RabbitMQ死信转发
rabbitmqadmin move_messages \
src_queue=积压队列 \
dst_queue=临时队列 \
routing_key=dead_letter
后续用独立消费者慢慢处理。
在网关层或RPC调用时添加限流:
# Sentinel配置
- resource: sendMessage
strategy: QPS
count: 500 # 限流500请求/秒
# Kafka重置Offset到2小时前
kafka-consumer-groups.sh --reset-offsets \
--to-datetime 2024-07-10T14:00:00.000 \
--group my-group \
--topic order_topic \
--execute
慎用! 需确认业务是否允许重复消费。
✅ 面试金句:
“我们通过动态线程池框架动态调整消费者并发数,去年双十一抗住10倍流量冲击”
高频追问:
“积压了100万条消息,怎么快速恢复服务?”
参考答案:
加分项:
🎁 友情提示:
如果需要购买面试鸭会员,可以通过 面试鸭返利网 找我返利25元!用实战题库准备面试更高效~
MQ消息积压本质是系统不平衡问题。平时多积累:
jstack
分析消费者线程状态把这些实战细节答出来,offer稳一半! 👨💻
返回面试鸭返利网首页查看更多面试干货!
扫码联系我返利
(当前返利8元,金额随官方实际价格波动,最好提前咨询)
面试鸭小程序码
美团大额优惠券,给自己加个鸡腿吧!
支付宝扫码领取1-8元无门槛红包