📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。
📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

【一、RabbitMQ知识体系】
- 消息模型
RabbitMQ作为AMQP协议的实现之一,其消息模型设计旨在提供高可靠性、灵活性和可扩展性。在RabbitMQ中,消息的生产、传递、存储和消费是通过以下组件实现的:
(1)生产者(Producer):生产者在发送消息时,需要指定消息内容、路由键和消息属性。RabbitMQ使用序列化机制将消息对象转换为字节流,以便在网络上传输。
(2)交换器(Exchange):交换器是消息路由的中心,它根据生产者指定的路由键和自身的类型来决定消息的去向。直连交换器(Direct Exchange)通过精确匹配路由键将消息发送到绑定队列;扇形交换器(Fanout Exchange)则将消息广播到所有绑定队列;主题交换器(Topic Exchange)通过正则表达式匹配路由键,将消息发送到符合模式的队列。
(3)队列(Queue):队列是存储消息的容器。消息被发送到队列后,只有在队列中等待的消费者消费了消息,或者消息超时未被消费时,队列才会释放空间。
(4)绑定(Binding):绑定是交换器与队列之间的连接,它定义了交换器将消息发送到哪个队列,以及如何根据路由键匹配消息。
- 消息传递
(1)消息确认机制:RabbitMQ使用消息确认(ACK)机制来确保消息的可靠传递。消费者在消费消息后,必须发送ACK信号给RabbitMQ,表明消息已被成功处理。如果消费者无法处理消息,它可以发送NACK信号或者拒绝消息,这时RabbitMQ会将消息重新入队。
(2)事务消息:事务确保了消息从生产到消费过程中的原子性。RabbitMQ提供了事务API,使得消息的生产、确认和回滚过程可以被事务控制。
(3)死信队列(Dead Letter Queue,DLQ):死信队列用于接收无法正常处理的消息,如超时消息、拒绝消息和不可路由消息。通过监控和分析DLQ中的消息,可以排查系统中的问题。
- 集群架构
(1)镜像队列:镜像队列通过复制消息到多个节点,实现了高可用性。当某个节点故障时,其他节点可以接管其工作,确保消息不丢失。
(2)联邦插件:联邦插件允许跨多个RabbitMQ集群分发消息,使得不同集群之间的消息可以互相传递。
(3)集群节点类型:RabbitMQ集群中的节点可以分为管理节点、工作节点和备用节点。管理节点负责集群管理任务,工作节点处理消息,备用节点提供冗余。
- 高级特性
(1)TTL消息:TTL(Time To Live)设置消息的存活时间,超过TTL的消息将被自动删除,这有助于清理过期消息。
(2)优先级队列:RabbitMQ允许为消息设置优先级,高优先级消息在队列中优先被消费。
(3)RPC模式:RabbitMQ支持RPC模式,客户端可以通过发送消息来调用服务端的方法,并接收响应。
【二、RocketMQ知识体系】
- 消息类型
(1)定时消息:RocketMQ支持定时消息,允许用户指定消息的发送时间,实现定时任务。
(2)事务消息:事务消息通过两阶段提交确保消息的可靠传递,即使在消费过程中发生异常,也能保证消息的一致性。
(3)延迟消息:延迟消息允许用户指定消息的延迟时间,实现延时任务。
- 存储机制
(1)CommitLog设计:RocketMQ的CommitLog采用顺序写的方式,将消息直接写入磁盘,确保写入效率。
(2)消息索引:RocketMQ为每条消息生成索引,包括消息的Key、Tag、时间戳等,方便快速查找。
(3)刷盘策略:RocketMQ采用双缓冲机制,先写入内存中的CommitLog,然后定时刷盘到磁盘,确保数据安全。
- 高可用设计
(1)主从同步:RocketMQ通过主从同步机制保证数据的一致性,主节点故障时,从节点可以快速接管。
(2)Dledger选举:Dledger选举机制允许RocketMQ集群在主节点故障时自动选举新的主节点。
(3)故障转移:RocketMQ支持故障转移机制,当节点故障时,其他节点可以接管其任务,保证服务的连续性。
- 扩展功能
(1)消息轨迹:RocketMQ支持查询消息的发送、消费和传输过程,帮助用户追踪消息的流转。
(2)ACL控制:RocketMQ支持消息的访问控制列表(ACL),限制对消息的访问,防止未授权访问。
(3)多副本机制:RocketMQ支持消息的多副本存储,提高数据可靠性。
【三、Kafka知识体系】
- 核心组件
(1)生产者(Producer):生产者负责将消息发送到Kafka集群。Kafka提供多种生产者配置,如分区策略、消息压缩等。
(2)消费者(Consumer):消费者从Kafka集群中消费消息。Kafka允许消费者组成消费者组,共同消费主题中的消息。
(3)主题(Topic):主题是Kafka中的消息分类,一个主题可以包含多个分区。
(4)分区(Partition):分区是主题的一个逻辑分区,用于存储消息。
(5)副本(Replica):副本是分区的物理备份,用于实现高可用性和容错。
- 流处理
(1)生产者分区策略:Kafka提供多种分区策略,如随机分区、轮询分区等,确保消息均匀分布。
(2)消费者组机制:消费者组允许多个消费者实例共同消费一个主题的消息,提高消费效率。
(3)ISR集合:ISR(In-Sync Replicas)集合是指副本集合中所有副本都处于同步状态,保证了数据的一致性。
- 运维监控
(1)副本同步机制:Kafka通过副本同步机制保证数据的一致性,确保所有副本的数据相同。
(2)日志清理策略:Kafka支持日志清理策略,如压缩、删除等,优化存储空间。
(3)JMX指标:Kafka提供JMX指标,方便监控集群状态,及时发现和处理问题。
- 生态集成
(1)Connect连接器:Kafka Connect允许连接外部系统,如数据库、JMS等,实现数据同步。
(2)Schema Registry:Kafka Schema Registry支持消息的元数据管理,如数据类型、版本等。
(3)KSQL引擎:KSQL是Kafka的SQL引擎,允许用户使用SQL查询Kafka中的数据。
总结:
RabbitMQ、RocketMQ和Kafka都是高性能的消息中间件,它们在消息模型、消息传递、集群架构和高级特性等方面各有特点。在实际应用中,可以根据具体需求和场景选择合适的消息中间件。以下是三者的对比:
-
消息模型:RabbitMQ采用AMQP协议,RocketMQ和Kafka采用自己的协议。
-
消息传递:RabbitMQ支持消息确认机制、事务消息和死信队列;RocketMQ支持定时消息、事务消息和延迟消息;Kafka支持消息确认机制、事务消息和副本同步机制。
-
集群架构:RabbitMQ支持镜像队列、联邦插件和集群节点类型;RocketMQ支持主从同步、Dledger选举和故障转移;Kafka支持副本同步机制、日志清理策略和JMX指标。
-
高级特性:RabbitMQ支持TTL消息、优先级队列和RPC模式;RocketMQ支持消息轨迹、ACL控制和多副本机制;Kafka支持Connect连接器、Schema Registry和KSQL引擎。
在实际应用中,可以根据具体需求和场景选择合适的消息中间件,充分发挥其优势。
📥博主的人生感悟和目标

- 💂 博客主页: Java程序员廖志伟希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号:
SeniorRD

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!
🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~