消息中间件篇

简介: 本内容总结了RabbitMQ与Kafka在消息队列中的常见问题及解决方案,涵盖消息不丢失、不重复消费、顺序性、高可用、性能优化等方面,适用于面试或技术选型参考。
  1. RabbitMQ如何保证消息不丢失?

候选人

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

  1. 开启生产者确认机制,确保消息能被送达队列,如有错误则记录日志并修复数据。
  2. 启用持久化功能,保证消息在未消费前不会在队列中丢失,需要对交换机、队列和消息本身都进行持久化。
  3. 对消费者开启自动确认机制,并设置重试次数。例如,我们设置了3次重试,若失败则将消息发送至异常交换机,由人工处理。


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

候选人

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

  • 设置消费者为自动确认模式,如果服务在确认前宕机,重启后可能会再次消费同一消息。
  • 通过业务唯一标识检查数据库中数据是否存在,若不存在则处理消息,若存在则忽略,避免重复消费。


  1. 那你还知道其他的解决方案吗?

候选人

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

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


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

候选人

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

  • 消息若超时未消费则变为死信,队列可绑定死信交换机,实现延迟功能。
  • 另一种方法是安装RabbitMQ的死信插件,简化配置,在声明交换机时指定为死信交换机,并设置消息超时时间。


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

候选人

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

  1. 提高消费者消费能力,如使用多线程。
  2. 增加消费者数量,采用工作队列模式,让多个消费者并行消费同一队列。
  3. 扩大队列容量,使用RabbitMQ的惰性队列,支持数百万条消息存储,直接存盘而非内存。


  1. RabbitMQ的高可用机制了解吗?

候选人

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

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


  1. 那出现丢数据怎么解决呢?

候选人

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


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

候选人

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

  1. 生产者使用异步回调发送消息,设置重试机制应对网络问题。
  2. 在Broker中通过复制机制,设置acks参数为all,确保消息在所有副本中都得到确认。
  3. 消费者手动提交消费成功的offset,避免自动提交可能导致的数据丢失或重复消费。


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

候选人

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

  • 禁用自动提交offset,手动控制offset提交时机。
  • 确保消息消费的幂等性,例如通过唯一主键或分布式锁。


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

候选人

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

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


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

候选人

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

  • 集群部署,多broker实例,单点故障不影响整体服务。
  • 复制机制,每个分区有多个副本,leader和follower,leader故障时从follower中选举新leader。


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

候选人

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

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


  1. Kafka数据清理机制了解吗?

候选人

Kafka的数据清理包括:

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


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

候选人

Kafka高性能设计包括:

  • 消息分区,提升数据处理能力。
  • 顺序读写,提高磁盘操作效率。
  • 页缓存,减少磁盘访问。
  • 零拷贝,减少数据拷贝和上下文切换。
  • 消息压缩,减少IO负载。
  • 分批发送,降低网络开销。
目录
相关文章
|
5月前
|
负载均衡 算法 Java
微服务篇
本内容整理了Spring Cloud微服务架构中的核心组件、服务注册与发现机制、负载均衡策略、服务容错、限流算法、分布式事务及接口幂等性设计等关键技术点,并结合Nacos、Sentinel、Seata等中间件进行实际应用解析。
389 0
|
5月前
|
NoSQL Redis Docker
第十章 常用组件
本资料涵盖技术知识点,包括Nginx原理与应用、分布式事务处理、分布式锁机制、Redis数据管理、消息队列、Elasticsearch搜索、Docker容器化、Git版本控制及Maven项目管理,适用于Java后端开发面试复习。
93 0
|
5月前
|
SQL Apache Windows
Windows服务器80端口被占用的全面解决方案
在服务管理器中启动apache2服务,即可正常使用80端口。若系统中还安装了其他微软产品如sql等,也可尝试停止其服务进行测试,但请注意,SQL通常不会使用80端口,因此一般不会受到影响。以上就是关于80端口被system占用的详细解决方法,希望对你有所帮助。
|
5月前
|
算法 NoSQL Java
票据系统全流程解析:业务与技术实现
本项目为电子票据系统,基于微服务架构实现票据全生命周期管理,涵盖出票、背书、贴现、质押、到期兑付等核心业务流程。系统对接上海票据交易所,采用国密算法加密传输,保障交易安全。技术上使用Seata解决分布式事务一致性,通过RabbitMQ和线程池提升高并发处理能力,结合Redis实现分布式锁与数据缓存,提升系统性能与可靠性。
318 0
票据系统全流程解析:业务与技术实现
|
5月前
|
消息中间件 NoSQL Redis
水镜 OMS 系统:全渠道电商中台的设计与实现
水镜OMS是全渠道电商中台,整合线上线下资源,统一管理订单、库存与营销。支持天猫、京东等10+平台接入,通过订单路由与库存共享,实现高效订单处理。系统采用SpringCloud Alibaba架构,结合Redis、Kafka、分库分表等技术,保障高并发下稳定运行,日均订单量超10万,峰值达5000TPS,助力企业提升运营效率与数字化能力。
284 0
|
5月前
|
运维 Prometheus 监控
系统崩了怪运维?别闹了,你该问问有没有自动化!
系统崩了怪运维?别闹了,你该问问有没有自动化!
187 9
|
5月前
|
存储 canal 缓存
Redis篇
本内容整理了Redis缓存常见问题及解决方案,涵盖缓存穿透、击穿、雪崩的原理与应对策略,布隆过滤器的使用,缓存与数据库双写一致性方案(如读写锁、Canal组件),Redis持久化机制(RDB与AOF对比),数据过期与淘汰策略,分布式锁实现(如Redisson),主从同步、集群方案及高并发高可用保障措施,深入解析Redis性能优化与实际应用技巧,适合用于面试准备或技术提升。
198 0
|
5月前
|
存储 算法 安全
JVM虚拟机篇
JVM虚拟机篇
449 0
|
5月前
|
缓存 Java 数据库连接
SSM框架
本内容整理了Spring框架与MyBatis常见面试题,涵盖单例Bean线程安全、AOP、事务管理、Bean生命周期、循环依赖、SpringMVC流程、Spring Boot自动配置、注解使用及MyBatis执行流程与缓存机制,适用于Java开发者面试准备。
51 0
|
5月前
|
消息中间件 存储 算法
医疗问诊项目
本项目为医疗服务平台,涵盖用户预约、医生管理、支付系统、数据统计等功能。采用微服务架构,结合Elasticsearch实现附近医生搜索与海量订单查询,使用WebSocket实现实时通信,通过XXL-JOB进行定时任务调度,利用Kafka实现数据同步与风控审核,提升系统性能与用户体验。
121 0