MQ

浏览该分类下的所有文章

消息队列基本原理和选型对比

消息队列解决解耦、异步、削峰填谷,常用点对点和发布/订阅模式。选型关注顺序、伸缩、留存、容错、可靠性、时序、吞吐、路由等。Kafka 吞吐高、持久可靠但全局有序和延时受限;RabbitMQ 路由灵活、支持定时消息,性能一般且学习成本高;Pulsar 计算存储分离,支持无缝扩容、跨地域复制和延时消息,架构较复杂;RocketMQ 提供顺序队列、P2P 与 Pub/Sub,可靠性高、协议丰富,社区活跃度一般。依据业务流量、可靠性和扩展需求选择合适实现。

聊聊幂等设计

幂等指一次或多次请求产生相同副作用,常用于防止超时重试导致的重复操作。为保证幂等,需要为每个请求生成全局唯一ID(如UUID、Snowflake),并在业务层通过唯一索引、主键冲突、状态机、独立防重表、token、悲观/乐观锁、分布式锁等八种方式实现过滤重复。接口超时可先查询结果或直接重试前提是下游提供幂等保障。文中还说明了 HTTP 方法的幂等性:GET、HEAD、OPTIONS、DELETE、PUT 为幂等,POST 不具幂等。

面试现场【MQ篇】

本文梳理了十个常见的消息队列面试题及要点:阐述了 MQ 的概念和 RabbitMQ、RocketMQ、Kafka 等主流中间件;列举了应用解耦、流量削峰、异步处理、消息通信、远程调用等典型场景;重点说明了生产者、存储端和消费者三阶段如何防止消息丢失、实现同步刷盘和复制、确保消费成功;介绍了保证顺序消费的分区/单线程策略及局部有序实现方式;讨论了重复消费的可能性及基于唯一标识或 Redis 的幂等方案;提供了排查与扩容、分批消费等应对消息积压的思路;对 Kafka、RocketMQ、RabbitMQ 在吞吐、语言、持久化、顺序、集群等方面进行对比选型;解析了基于副本选举的高可用机制;说明了事务消息的两段提交流程以保证数据一致性;最后给出设计自研 MQ 时应考虑的整体流程、RPC、持久化、消费模型、高可用、事务与伸缩等关键要素。