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

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

一、RabbitMQ知识体系
消息模型
RabbitMQ作为基于AMQP协议的消息代理,其消息模型设计旨在提供灵活性和可扩展性,以适应不同的业务需求。以下是三种主要的消息模型及其实现细节:
-
直连交换器(Direct Exchange):在这种模式下,消息的发送者根据指定的路由键将消息发送到交换器,交换器再根据路由键将消息路由到绑定的队列。实现细节包括:
- 路由键的精确匹配:发送者需要正确设置消息的路由键,交换器根据路由键匹配队列。
- 队列绑定:在RabbitMQ中,队列需要与交换器进行绑定,指定路由键,以便交换器能够根据路由键将消息发送到对应的队列。
-
扇形交换器(Fanout Exchange):扇形交换器将接收到的消息广播到所有与之绑定的队列。实现细节包括:
- 无路由键匹配:扇形交换器不进行路由键匹配,直接将消息广播到所有绑定的队列。
- 简化路由:由于不需要路由键匹配,扇形交换器适用于广播消息的场景。
-
主题交换器(Topic Exchange):主题交换器根据消息的路由键的模式,将消息发送到符合模式的队列。实现细节包括:
- 路由键模式匹配:路由键可以包含通配符(如“#”和“*”),用于匹配队列。
- 主题订阅:消费者需要订阅特定的主题,以便接收符合路由键模式的消息。
消息传递
RabbitMQ的消息传递机制确保消息的可靠性和一致性,以下是其关键点的技术实现细节:
-
消息确认机制:消费者在消息处理完成后发送确认信号,告知RabbitMQ消息已成功处理。实现细节包括:
- 自动确认模式:消费者在接收消息时自动发送确认信号。
- 手动确认模式:消费者在处理完消息后显式发送确认信号。
-
事务消息:事务确保消息的原子性,要么全部成功,要么全部失败。实现细节包括:
- 开启事务:在发送或接收消息前开启事务。
- 提交/回滚事务:在消息处理完成后提交事务,或者在出现错误时回滚事务。
-
死信队列:当消息无法被消费时,如过期、拒绝或队列长度超过限制,会被发送到死信队列。实现细节包括:
- 死信交换器:创建一个特殊的交换器,用于接收死信队列的消息。
- 死信路由键:设置特定的路由键,以便将死信消息路由到死信队列。
集群架构
RabbitMQ集群架构设计用于提高可用性和扩展性,以下是其主要技术的实现细节:
-
镜像队列:在多个节点上复制队列,提高数据冗余。实现细节包括:
- 镜像队列配置:在创建队列时指定镜像队列,并设置复制策略。
- 节点同步:RabbitMQ通过节点间的心跳和同步机制,保持镜像队列的一致性。
-
联邦插件:将多个RabbitMQ节点组成一个联邦,实现跨节点的消息传递。实现细节包括:
- 联邦插件配置:在RabbitMQ中启用联邦插件,并配置联邦成员。
- 跨节点消息传递:联邦插件通过虚拟交换器实现跨节点消息传递。
-
集群节点类型:包括普通节点、管理节点和监控节点。实现细节包括:
- 节点角色分配:根据节点功能分配节点角色。
- 节点监控:监控节点状态,确保集群稳定运行。
高级特性
RabbitMQ的高级特性旨在增强其功能,以下是其实现细节:
-
TTL消息:设置消息的过期时间,超过时间后消息会被丢弃。实现细节包括:
- TTL设置:在发送消息时指定TTL值。
- 消息过期处理:RabbitMQ在消息过期时将其移除。
-
优先级队列:允许消息根据优先级进行排序和消费。实现细节包括:
- 优先级设置:在发送消息时指定优先级。
- 优先级消费:RabbitMQ根据优先级排序消息,优先处理高优先级消息。
-
RPC模式:提供远程过程调用功能,实现异步调用。实现细节包括:
- RPC请求/响应模式:客户端发送RPC请求,服务端处理请求并发送响应。
- 请求/响应队列:RabbitMQ为RPC请求和响应创建队列,实现请求/响应通信。
二、RocketMQ知识体系
消息类型
RocketMQ支持多种消息类型,以满足不同的业务场景。以下是几种主要消息类型及其实现细节:
-
定时消息:在指定时间发送的消息。实现细节包括:
- 定时任务调度:RocketMQ通过定时任务调度器实现消息的定时发送。
- 时间戳标记:消息中包含时间戳,用于标记发送时间。
-
事务消息:确保消息的原子性,支持本地事务。实现细节包括:
- 事务消息标记:消息中包含事务标识,用于标识事务消息。
- 事务消息处理:RocketMQ在事务消息处理过程中,确保消息的原子性。
-
延迟消息:在指定延迟后发送的消息。实现细节包括:
- 延迟队列:RocketMQ通过延迟队列实现消息的延迟发送。
- 延迟时间标记:消息中包含延迟时间,用于标记发送延迟。
存储机制
RocketMQ的存储机制是其核心功能之一,以下是其实现细节:
-
CommitLog设计:存储消息的日志文件,是消息存储的核心。实现细节包括:
- 日志文件存储:CommitLog将消息存储在磁盘上的日志文件中。
- 数据持久化:RocketMQ通过刷盘策略确保消息的持久化。
-
消息索引:快速定位消息的位置。实现细节包括:
- 索引文件存储:RocketMQ在磁盘上存储索引文件,用于快速定位消息。
- 索引更新:RocketMQ在消息写入时更新索引文件。
-
刷盘策略:确保消息持久化到磁盘。实现细节包括:
- 消息持久化策略:RocketMQ提供多种消息持久化策略,如同步刷盘、异步刷盘等。
- 刷盘时机:RocketMQ在消息写入后,根据策略选择合适的时机进行刷盘。
高可用设计
RocketMQ提供高可用设计,以下是其主要技术的实现细节:
-
主从同步:确保数据的一致性。实现细节包括:
- 主从复制:RocketMQ通过主从复制机制,确保主节点和从节点数据的一致性。
- 同步机制:RocketMQ通过同步机制,确保主从节点数据的一致性。
-
Dledger选举:在主节点故障时进行选举。实现细节包括:
- 选举算法:RocketMQ采用基于Raft算法的选举算法,实现高可用性。
- 选举流程:在主节点故障时,从节点进行选举,选择新的主节点。
-
故障转移:在节点故障时自动切换到备份节点。实现细节包括:
- 节点监控:RocketMQ监控节点状态,检测节点故障。
- 故障转移流程:在节点故障时,自动切换到备份节点,确保服务可用。
扩展功能
RocketMQ提供了一些扩展功能,以增强其功能,以下是其主要技术的实现细节:
-
消息轨迹:跟踪消息的传递过程。实现细节包括:
- 消息追踪日志:RocketMQ记录消息的传递过程,生成追踪日志。
- 跟踪日志分析:对追踪日志进行分析,了解消息传递过程。
-
ACL控制:访问控制列表,控制对消息的访问。实现细节包括:
- 权限控制:RocketMQ通过权限控制,限制对消息的访问。
- 访问控制策略:RocketMQ提供多种访问控制策略,如白名单、黑名单等。
-
多副本机制:提高数据的冗余和可用性。实现细节包括:
- 副本复制:RocketMQ在多个节点上复制数据,提高数据的冗余。
- 副本选举:在主节点故障时,从节点进行选举,选择新的主节点。
三、Kafka知识体系
核心组件
Kafka的核心组件包括生产者、消费者和主题,以下是其实现细节:
-
生产者分区策略:决定消息发送到哪个分区。实现细节包括:
- 轮询策略:生产者按顺序将消息发送到不同的分区。
- 随机策略:生产者随机选择一个分区发送消息。
- 负载均衡策略:生产者根据分区负载情况选择分区发送消息。
-
消费者组机制:多个消费者共同消费一个主题的消息。实现细节包括:
- 消费者分配:Kafka根据消费者组分配消息。
- 消费者偏移量:消费者记录已消费消息的偏移量,确保消息不重复消费。
-
ISR集合:同步副本集合,确保消息的可靠性。实现细节包括:
- 副本同步:Kafka通过副本同步机制,确保ISR集合中的副本数据一致。
- 副本选举:在副本发生故障时,Kafka进行副本选举,选择新的副本。
流处理
Kafka支持流处理,以下是其主要技术的实现细节:
-
KStream API:用于构建流处理应用程序。实现细节包括:
- 流处理操作:KStream API提供丰富的流处理操作,如过滤、聚合、连接等。
- 状态存储:KStream API支持状态存储,用于持久化状态信息。
-
状态存储:持久化状态信息。实现细节包括:
- 状态存储策略:Kafka提供多种状态存储策略,如内存存储、磁盘存储等。
- 状态恢复:在系统重启或故障恢复时,Kafka可以从状态存储中恢复状态信息。
-
时间窗口:对消息进行时间窗口划分。实现细节包括:
- 时间窗口策略:Kafka提供多种时间窗口策略,如固定时间窗口、滑动时间窗口等。
- 时间窗口计算:Kafka根据时间窗口策略计算消息的时间窗口。
运维监控
Kafka提供运维监控功能,以下是其主要技术的实现细节:
-
副本同步机制:监控副本同步状态。实现细节包括:
- 副本同步监控:Kafka监控副本同步状态,确保数据一致性。
- 异常处理:在副本同步异常时,Kafka进行异常处理,确保服务可用。
-
日志清理策略:清理旧的日志文件。实现细节包括:
- 日志清理策略:Kafka提供多种日志清理策略,如按时间、按大小等。
- 日志清理操作:Kafka定期执行日志清理操作,清理旧的日志文件。
-
JMX指标:通过JMX获取性能指标。实现细节包括:
- JMX指标配置:Kafka配置JMX指标,将性能指标暴露给JMX客户端。
- JMX指标查询:JMX客户端查询Kafka的JMX指标,获取性能信息。
生态集成
Kafka与多个生态组件集成,以下是其主要技术的实现细节:
-
Connect连接器:用于数据集成和转换。实现细节包括:
- 数据源连接:Connect连接器支持多种数据源连接,如数据库、文件等。
- 数据转换:Connect连接器支持数据转换,将数据从一种格式转换为另一种格式。
-
Schema Registry:管理数据模式。实现细节包括:
- 模式存储:Schema Registry存储数据模式,用于数据集成和转换。
- 模式版本控制:Schema Registry支持数据模式版本控制,确保数据格式一致性。
-
KSQL引擎:用于SQL查询Kafka数据。实现细节包括:
- SQL查询:KSQL支持SQL查询Kafka数据,如过滤、聚合等。
- 查询执行:KSQL执行SQL查询,返回查询结果。
📥博主的人生感悟和目标

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

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