文章目录
-
-
- 一、RocketMQ vs Kafka 核心对比(面试速记版)
- 二、常见异常问题及解决方法(落地+项目适配)
-
- 1. 通用异常:消息丢失(面试最高频)
- 2. 通用异常:消息重复消费
- 3. 通用异常:消息堆积(高并发场景)
- 4. RocketMQ特有异常:事务消息提交失败
- 5. Kafka特有异常:分区副本同步异常
- 三、总结(面试速记)
-
一、RocketMQ vs Kafka 核心对比(面试速记版)
| 定位 | 金融级消息中间件,侧重可靠性、事务、低延迟 | 大数据场景消息中间件,侧重高吞吐、高并发 |
| 核心架构 | NameServer(轻量路由)+ Broker + Producer/Consumer | Zookeeper/Kafka Controller + Broker + Topic(分区) |
| 性能特点 | 单机TPS 10万+,延迟毫秒级,兼顾吞吐与可靠性 | 单机TPS 百万+,超高吞吐,延迟略高(毫秒级) |
| 可靠性 | 默认同步刷盘,支持事务消息、消息回溯,丢失率极低 | 默认异步刷盘,需手动配置保障可靠性,易丢失 |
| 核心功能 | 事务消息、定时/延迟消息、死信队列、消息过滤 | 分区副本、消费者组重平衡,无原生事务消息 |
| 适用场景 | 金融交易、电商订单、供应链金融 | 日志采集、大数据流处理、实时计算 |
二、常见异常问题及解决方法(落地+项目适配)
1. 通用异常:消息丢失(面试最高频)
核心原因:生产者发送失败、Broker未持久化、消费者未确认消费 RocketMQ解决:
- 生产者:开启sendMsgTimeout超时重试,用同步发送+ACK确认(sendResult.getSendStatus() == SEND_OK);
- Broker:开启同步刷盘(flushDiskType=SYNC_FLUSH)、主从复制;
- 消费者:关闭autoCommit,消费成功后手动提交consumer.sendMessageBack()。 Kafka解决:
- 生产者:设置acks=all(需所有副本确认)、retries=3重试、enable.idempotence=true(幂等);
- Broker:设置min.insync.replicas=2(至少2个副本同步)、unclean.leader.election.enable=false(禁止非同步副本成主);
- 消费者:手动提交offset,避免消费前提交。 项目适配:你的供应链金融项目用RocketMQ,开启同步刷盘+事务消息,杜绝交易消息丢失,保障金融合规。
2. 通用异常:消息重复消费
核心原因:网络抖动、消费确认超时、重试机制触发 解决方法:
- 核心:消费逻辑幂等化(面试必说)—— 基于唯一业务ID(如订单号、交易流水号),Redis/数据库做幂等校验;
- RocketMQ:开启消费重试次数限制(maxReconsumeTimes=3),超过则进入死信队列(DLQ),人工排查;
- Kafka:关闭自动提交,消费成功后再提交offset,避免重复拉取。 项目适配:B2B供应链平台中,用订单号作为唯一ID,Redis的setnx做幂等,即使消息重复消费也不会重复扣库存/生成订单。
3. 通用异常:消息堆积(高并发场景)
核心原因:生产速度>消费速度、消费者宕机、消费逻辑慢 解决方法:
- 临时扩容:增加消费者实例(RocketMQ/Kafka均支持消费者组水平扩展);
- 优化消费:拆分消费逻辑、异步消费、减少消费内数据库IO;
- 架构优化:
- RocketMQ:开启消息堆积告警,用MessageQueue负载均衡,慢消费任务分流到专属消费组;
- Kafka:增加分区数(提前规划,分区不可减少),用Kafka Streams做流式处理提速。 项目适配:你的MES项目批量导入场景,用RocketMQ分流慢消费任务,避免生产端批量发消息导致堆积。
4. RocketMQ特有异常:事务消息提交失败
核心原因:半事务消息未确认、Broker与生产者通信异常 解决方法:
- 生产者开启事务回查机制(checkTransactionState),Broker定时回查未确认的半事务消息;
- 事务消息状态持久化到数据库,回查时从库读取状态,避免内存丢失。 项目适配:供应链金融交易中,用RocketMQ事务消息保证“交易入库+消息发送”原子性,回查机制兜底解决通信异常。
5. Kafka特有异常:分区副本同步异常
核心原因:Broker宕机、网络分区导致副本不同步 解决方法:
- 监控UnderReplicatedPartitions指标,及时扩容Broker;
- 设置replica.lag.time.max.ms=30000(副本同步超时时间),超时则剔除异常副本;
- 避免单Broker部署,至少3节点集群,副本数≥2。


