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

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

RabbitMQ知识体系补充说明
消息模型
-
直连交换器(Direct Exchange):在实现上,直连交换器通过交换器内部的查找表来匹配消息。查找表将队列绑定键映射到对应的队列。消息到达交换器时,交换器通过查找表找到与之匹配的队列,并将消息投递到该队列。
-
扇形交换器(Fanout Exchange):扇形交换器在内部没有查找表,它将接收到的每条消息广播到所有绑定的队列。这种交换器适用于需要将消息广播到多个消费者的场景。
-
主题交换器(Topic Exchange):主题交换器使用正则表达式匹配消息的路由键。在内部,它维护一个路由表,将主题映射到队列。当消息到达时,交换器根据路由键匹配主题,然后根据路由表将消息投递到相应的队列。
消息传递
-
消息确认机制:消费者在处理完消息后,需要向RabbitMQ发送一个确认信号。如果消费者在指定的时间内没有发送确认信号,RabbitMQ会认为消息处理失败,并将消息重新投递给其他消费者。
-
事务消息:事务消息通过RabbitMQ的事务机制来保证消息的原子性。发送消息时,开启事务,在事务中发送消息和确认消息。如果事务中的任何一步失败,则回滚事务,所有消息都不会被投递。
-
死信队列(Dead Letter Queue, DLQ):当消息无法被路由到队列或消费者无法处理消息时,消息会被发送到死信队列。在死信队列中,管理员可以查看和分析无法处理的消息,并采取相应的措施。
集群架构
-
镜像队列(Mirrored Queue):在集群中创建镜像队列时,RabbitMQ会自动在多个节点上创建队列的副本。当其中一个节点发生故障时,其他节点上的队列副本可以接管其工作。
-
联邦插件(Federation Plugin):联邦插件允许跨多个RabbitMQ集群的消息传递。通过联邦,可以将不同集群中的队列连接起来,实现跨集群的消息交换。
-
集群节点类型:磁盘节点存储持久化消息,内存节点存储非持久化消息。在实现上,磁盘节点使用文件系统来存储消息,而内存节点则将消息存储在内存中。
高级特性
-
TTL消息(Time-To-Live):在发送消息时,可以设置消息的TTL,即消息的有效期。超过TTL的消息将被自动删除。
-
优先级队列:在RabbitMQ中,可以为消息设置优先级。优先级高的消息会先被处理。
-
RPC模式:RabbitMQ通过交换器和队列来实现RPC调用。客户端发送请求消息到队列,服务器从队列中获取请求消息并处理,然后将响应消息发送回客户端。
RocketMQ知识体系补充说明
消息类型
-
定时消息:在RocketMQ中,定时消息是通过存储消息的定时时间戳来实现的。当消息到达时,RocketMQ会检查消息的时间戳,如果当前时间小于定时时间戳,则将消息存储在定时队列中,并在指定时间投递消息。
-
事务消息:事务消息通过RocketMQ的事务机制来保证消息的原子性。在发送消息时,开启事务,在事务中发送消息和确认消息。如果事务中的任何一步失败,则回滚事务,所有消息都不会被投递。
-
延迟消息:延迟消息是通过存储消息的延迟时间戳来实现的。当消息到达时,RocketMQ会检查消息的时间戳,如果当前时间小于延迟时间戳,则将消息存储在延迟队列中,并在指定时间投递消息。
存储机制
-
CommitLog设计:CommitLog是RocketMQ存储所有消息的日志文件。它采用顺序读写的方式,保证消息的持久性和可靠性。
-
消息索引:RocketMQ通过消息索引快速定位消息的位置。消息索引存储在内存中,并提供快速查找功能。
-
刷盘策略:RocketMQ采用异步刷盘策略,将消息从内存写入磁盘。这种策略可以保证消息的持久性和系统的性能。
高可用设计
-
主从同步:在RocketMQ中,主节点负责消息的写入,从节点负责消息的读取。主从节点之间通过复制机制保持数据一致性。
-
Dledger选举:在主节点故障时,从节点可以自动选举新的主节点。Dledger选举算法可以保证选举的效率和可靠性。
-
故障转移:在主节点故障时,从节点可以接管主节点的任务。故障转移过程由RocketMQ的自动恢复机制完成。
扩展功能
-
消息轨迹:RocketMQ提供消息轨迹功能,可以追踪消息的生产、消费和处理过程。这对于调试和分析问题非常有用。
-
ACL控制:RocketMQ提供访问控制列表(ACL)功能,可以控制对消息服务的访问。通过ACL,可以限制某些用户或IP地址对消息服务的访问。
-
多副本机制:RocketMQ的多副本机制可以提高消息的可靠性和可用性。在实现上,每个消息都会在多个副本节点上存储。
Kafka知识体系补充说明
核心组件
-
生产者分区策略:Kafka的生产者分区策略包括轮询策略、随机策略和自定义策略。轮询策略将消息均匀地分配到各个分区,随机策略将消息随机地分配到各个分区,自定义策略则允许生产者根据业务需求自定义分区策略。
-
消费者组机制:Kafka的消费者组机制允许多个消费者同时消费同一个主题的不同分区。在实现上,每个消费者组都有一个消费者协调器,负责分配分区给消费者。
-
ISR集合:ISR集合表示副本集合中与主副本保持一致性的副本。在实现上,Kafka通过副本同步机制来保证ISR集合中的副本与主副本的一致性。
流处理
-
KStream API:KStream API是Kafka提供的流处理API。它允许开发者构建流处理应用程序,对实时数据进行处理和分析。
-
状态存储:Kafka的状态存储功能可以将流处理应用程序的状态持久化存储在Kafka中。这样可以保证应用程序在发生故障后可以快速恢复。
-
时间窗口:Kafka的时间窗口功能可以将时间序列数据划分为不同的窗口进行计算。这样可以方便地对实时数据进行聚合和分析。
运维监控
-
副本同步机制:Kafka的副本同步机制可以确保副本之间的一致性。在实现上,Kafka使用副本同步协议来保证副本之间的一致性。
-
日志清理策略:Kafka的日志清理策略可以清理不再需要的日志文件。在实现上,Kafka使用日志清理策略来删除旧的日志文件。
-
JMX指标:Kafka通过JMX提供性能指标。开发者可以使用JMX工具来监控Kafka的性能指标,及时发现和解决问题。
生态集成
-
Connect连接器:Kafka Connect连接器可以用于数据集成和数据流。它可以连接到各种数据源和目标,实现数据的导入和导出。
-
Schema Registry:Kafka Schema Registry可以用于管理数据模式。它可以确保数据模式的版本兼容性,并允许开发者轻松地访问和使用数据模式。
-
KSQL引擎:KSQL引擎是Kafka提供的SQL查询引擎。它可以用于查询和分析流数据。
📥博主的人生感悟和目标

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

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