当前位置: 首页 > news >正文

消息中间件面试精讲:RabbitMQ/Kafka核心概念、消息丢失与重复消费解决方案

1.RabbitMQ如何保证消息不丢失?

候选人

我们使用RabbitMQ来确保MySQL和Redis间数据双写的一致性,这要求我们实现消息的高可用性,具体措施包括:

  1. 开启生产者确认机制,确保消息能被送达队列,如有错误则记录日志并修复数据。

  2. 启用持久化功能,保证消息在未消费前不会在队列中丢失,需要对交换机、队列和消息本身都进行持久化。

  3. 对消费者开启自动确认机制,并设置重试次数。例如,我们设置了3次重试,若失败则将消息发送至异常交换机,由人工处理。

2.RabbitMQ消息的重复消费问题如何解决?

候选人

我们遇到过消息重复消费的问题,处理方法是:

  • 设置消费者为自动确认模式,如果服务在确认前宕机,重启后可能会再次消费同一消息。

  • 通过业务唯一标识检查数据库中数据是否存在,若不存在则处理消息,若存在则忽略,避免重复消费。

3.除此之外还有其他解决方案吗?

候选人

是的,这属于幂等性问题,可以通过以下方法解决:

  • 使用Redis分布式锁或数据库锁来确保操作的幂等性。

4.RabbitMQ中死信交换机了解吗?(RabbitMQ延迟队列有了解过吗?)

候选人

了解。我们项目中使用RabbitMQ实现延迟队列,主要通过死信交换机和TTL(消息存活时间)来实现。

  • 消息若超时未消费则变为死信,队列可绑定死信交换机,实现延迟功能。

  • 另一种方法是安装RabbitMQ的死信插件,简化配置,在声明交换机时指定为死信交换机,并设置消息超时时间。

5.如何有100万消息堆积在MQ,如何解决?

候选人

若出现消息堆积,可采取以下措施:

  1. 提高消费者消费能力,如使用多线程。

  2. 增加消费者数量,采用工作队列模式,让多个消费者并行消费同一队列。

  3. 扩大队列容量,使用RabbitMQ的惰性队列,支持数百万条消息存储,直接存盘而非内存。

6.RabbitMQ的高可用机制有了解过吗?

候选人

我们项目在生产环境使用RabbitMQ集群,采用镜像队列模式,一主多从结构。

  • 主节点处理所有操作并同步给从节点,若主节点宕机,从节点可接替为主节点,但需注意数据同步的完整性。

7.出现丢数据怎么解决?

候选人

使用仲裁队列,主从模式,基于Raft协议实现强一致性数据同步,简化配置,提高数据安全性。

8.Kafka是如何保证消息不丢失?

候选人

Kafka保证消息不丢失的措施包括:

  1. 生产者使用异步回调发送消息,设置重试机制应对网络问题。

  2. 在Broker中通过复制机制,设置acks参数为all,确保消息在所有副本中都得到确认。

  3. 消费者手动提交消费成功的offset,避免自动提交可能导致的数据丢失或重复消费。

9.Kafka中消息的重复消费问题是如何解决的?

候选人

通过以下方法解决Kafka中的重复消费问题:

  • 禁用自动提交offset,手动控制offset提交时机。

  • 确保消息消费的幂等性,例如通过唯一主键或分布式锁。

10.Kafka是如何保证消费的顺序性?

候选人

Kafka默认不保证消息顺序性,但可以通过以下方法实现:

  • 将消息存储在同一个分区,通过指定分区号或相同的业务key来实现。

11.Kafka的高可用机制了解吗?

候选人

Kafka的高可用性主要通过以下机制实现:

  • 集群部署,多broker实例,单点故障不影响整体服务。

  • 复制机制,每个分区有多个副本,leader和follower,leader故障时从follower中选举新leader。

12.解释一下复制机制中的ISR?

候选人

ISR(In-Sync Replicas)指与leader保持同步的follower副本。

  • 当leader故障时,优先从ISR中选举新leader,因为它们数据一致性更高。

13.kafka数据清理机制有了解过吗?

候选人

Kafka的数据清理包括:

  • 基于消息保留时间的清理。

  • 基于topic数据大小的清理,可配置删除最旧消息。

14.Kafka中实现高性能的设计有了解过吗?

候选人

Kafka高性能设计包括:

  • 消息分区,提升数据处理能力。

  • 顺序读写,提高磁盘操作效率。

  • 页缓存,减少磁盘访问。

  • 零拷贝,减少数据拷贝和上下文切换。

  • 消息压缩,减少IO负载。

  • 分批发送,降低网络开销。

http://www.jsqmd.com/news/1182935/

相关文章:

  • 从示例到源码:深入理解RequireJS Plugins的工作原理
  • TVA具身智能的概念、架构与应用(9)
  • Botty:暗黑2重制版的像素智能自动化新范式
  • 2篇8章2节:多状态生存模型的基本原理、竞争风险与三状态模型
  • DeepSeek-R1-Distill-Qwen-1.5B推理参数调优:温度、Top-k和Top-p设置技巧终极指南
  • 小程序毕设选题推荐:社区校园共享雨伞智能租赁管理平台的设计与实现 SpringBoot 移动端共享雨伞租借运维系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 萧邦中国官方售后服务中心|服务热线及门店详细地址权威信息声明(2026年7月最新) - 萧邦中国官方服务中心
  • NestOS构建利器nestos-assembler:从容器环境到系统镜像的完整指南
  • 使用ChatGPT,两周搞定一个课题申报和两篇学术论文,借助GPT高级学术版真实经验分享
  • Gotalk实战:构建多房间聊天应用的完整教程
  • 未来展望:Cosmos-H-Surgical-Simulator 在医疗AI和手术机器人领域的发展路线图
  • 2026年AI就业风口:收藏!大模型方向零基础入局指南,高薪岗位等你来拿!
  • 转:战略是有计划的机会主义
  • AMD-Quark量化实战:从零开始将Kimi-K2.6转换为NVFP4格式
  • 设计模式面试高频题:单例/工厂/代理/观察者模式在框架中的实际应用
  • Nemotron-Labs-Diffusion-VLM-8B开发者指南:自定义训练与微调的最佳实践
  • Llama-3.2-3B_rai_1.7.1_npu_16K模型参数详解:隐藏层、注意力头与16384上下文窗口配置
  • Jenkins-更改插件源为国内源
  • 小程序毕设选题推荐:基于小程序的特色农副产品推广交易系统的设计与实现 SpringBoot 赋能的农产品线上购销服务平台【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 用“量子启发“的小模型,精准预测互联网的流量走向
  • 2026年Q3岩棉复合板行业靠谱的供应厂家与品牌机构综合选型参考 - 甄选服务推荐
  • Instant-NuRec硬件要求详解:如何配置最佳GPU环境运行NVIDIA 3D重建模型
  • 简单3步!使用kokoro_mlx实现个性化语音定制的完整教程
  • 探索ARDY-G1-RP-25FPS-Horizon52模型架构:Two-Stage Transformer如何突破实时性瓶颈
  • 英伟达亲自给 Qwen3.6-27B 做 NVFP4 量化,本地部署党该冲还是该观望?
  • 三步解锁万亿参数智能体:Kimi K2本地部署与企业级应用实战指南
  • Phi-3.5-mini-instruct_rai_1.7.1_npu_4K深度解析:AMD Ryzen AI NPU部署的终极指南
  • 揭秘智能涂装转换器:3步完成Forza赛车个性化改造
  • 斯坦福大学:让AI学会“记笔记“,竟能让小模型打败顶级大模型?
  • 小程序 毕设项目:高校通勤校车智能预约管理系统的设计与实现 基于移动端的校园校车出行调度服务系统 (源码+文档,讲解、调试运行,定制等)