RabbitMQ/RocketMQ/Kafka知识体系

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

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

优快云

RabbitMQ知识体系补充说明

1. 消息模型

  • 直连交换器(Direct Exchange):其内部实现通过一个散列表(哈希表)来管理消息路由,根据Routing Key快速定位到相应的队列。在RabbitMQ中,散列表的构建和维护通常由RabbitMQ的内部机制完成,无需开发者手动干预。

  • 扇形交换器(Fanout Exchange):内部实现通过广播消息到所有绑定的队列,其处理方式相对简单,但可能对网络带宽产生较大压力。

  • 主题交换器(Topic Exchange):其内部实现采用正则表达式匹配Routing Key和队列绑定的Topic模式,以实现复杂的消息路由策略。RabbitMQ使用一个名为“BTree”的数据结构来高效地管理Topic的匹配。

  • 直接交换器(Direct Exchange):类似于直连交换器,但其可以处理多个Routing Key。在内部实现上,直接交换器使用多个散列表来分别管理不同的Routing Key。

2. 消息传递

  • 生产者发送消息:生产者在发送消息时,首先需要构建一个消息对象,其中包含消息内容、Routing Key、消息属性等信息。RabbitMQ的生产者客户端库负责将消息对象转换为字节序列,并使用AMQP协议发送到RabbitMQ服务器。

  • 交换器路由消息:交换器接收到消息后,根据消息的Routing Key和队列绑定的模式进行路由。RabbitMQ使用内部的数据结构来存储交换器与队列的绑定关系,并快速查找目标队列。

  • 消费者接收消息:消费者从队列中获取消息,可以使用RabbitMQ客户端库提供的多种API。消费者在接收到消息后,可以选择自动确认、手动确认或拒绝确认。

3. 消息确认机制

  • 自动确认(Auto Acknowledgment):消费者在接收到消息后,RabbitMQ客户端库会自动发送一个确认信号,告知服务器消息已经被成功处理。

  • 手动确认(Manual Acknowledgment):消费者在处理完消息后,需要显式地发送确认信号。这种方式可以确保消息在处理过程中不会丢失。

  • 消息拒绝(Nack):消费者在处理消息失败时,可以选择拒绝确认,并可以指定消息是否重新入队。RabbitMQ服务器会将拒绝的消息发送到死信队列。

4. 事务消息

  • 开启事务:生产者在发送消息前,需要调用RabbitMQ客户端库的API开启事务。

  • 提交事务:生产者在消息发送成功后,调用API提交事务,确保消息的原子性。

  • 回滚事务:生产者在消息发送失败后,调用API回滚事务,撤销已发送的消息。

5. 死信队列

  • 死信队列:当消息在队列中无法被消费或被拒绝时,会进入死信队列。RabbitMQ服务器会将死信队列中的消息发送到另一个队列,方便开发者进行问题排查。

6. 集群架构

  • 镜像队列(Mirrored Queue):在多个节点上创建相同的队列,以提高系统的可用性。RabbitMQ使用内部机制确保镜像队列的数据一致性。

  • 联邦插件(Federation Plugin):实现跨节点的消息传递。联邦插件通过AMQP协议在节点之间传输消息,实现跨节点的消息分发。

  • 集群节点类型:包括主节点(Master Node)和从节点(Slave Node)。主节点负责处理消息,从节点负责备份主节点的数据。

7. 高级特性

  • TTL消息:设置消息的存活时间,超过TTL的消息将被自动删除。RabbitMQ使用定时器来处理TTL消息的删除。

  • 优先级队列:根据消息的优先级进行排序,优先级高的消息先被处理。RabbitMQ使用散列表来存储优先级队列,并根据优先级进行排序。

  • RPC模式:通过RabbitMQ实现远程过程调用。RabbitMQ客户端库提供了RPC客户端和服务器端API,实现远程过程调用功能。

RocketMQ知识体系补充说明

1. 消息类型

  • 定时消息:RocketMQ使用CommitLog记录所有消息,并根据消息的延迟时间进行定时处理。

  • 事务消息:RocketMQ使用两阶段提交协议确保事务消息的原子性。在第一阶段,消息被发送到Broker,并写入CommitLog。在第二阶段,消息被发送到消费者。

  • 延迟消息:RocketMQ使用定时器来处理延迟消息。在发送消息时,可以指定延迟时间,RocketMQ会在延迟时间到达后发送消息。

2. 存储机制

  • CommitLog设计:RocketMQ使用CommitLog记录所有消息,保证消息的顺序性和持久性。CommitLog是一个顺序写文件,使用磁盘IO进行读写操作。

  • 消息索引:RocketMQ使用消息索引快速查找消息。消息索引包括消息ID、消息时间戳、消息偏移量等信息。

  • 刷盘策略:RocketMQ使用异步刷盘策略,将消息先写入内存,然后定时刷写到磁盘,以提高系统性能。

3. 高可用设计

  • 主从同步:RocketMQ使用主从同步机制保证数据的可靠性。主节点负责处理消息,从节点负责备份主节点的数据。

  • Dledger选举:在主节点故障时,从节点进行选举,保证系统的可用性。Dledger选举采用Raft算法,确保选举的可靠性和高效性。

  • 故障转移:在主节点故障时,从节点自动接管主节点的任务,保证系统的可用性。

4. 扩展功能

  • 消息轨迹:RocketMQ提供消息轨迹功能,记录消息的发送、接收和处理过程,方便开发者进行问题排查。

  • ACL控制:RocketMQ提供ACL控制功能,控制用户对消息的访问权限。

  • 多副本机制:RocketMQ在多个节点上存储消息,提高系统的可用性。多副本机制使用Paxos算法保证数据一致性。

Kafka知识体系补充说明

1. 核心组件

  • 生产者(Producer):生产者负责发送消息到Kafka集群。Kafka的生产者客户端库提供了多种消息发送策略,如异步发送、同步发送等。

  • 消费者(Consumer):消费者负责从Kafka集群中读取消息。Kafka的消费者客户端库提供了多种消息消费策略,如单线程消费、多线程消费等。

  • 分区(Partition):Kafka将消息存储在多个分区中,提高系统的吞吐量。每个分区只有一个副本,称为Leader副本。

  • 副本(Replica):每个分区有多个副本,提高系统的可用性。副本可以是Leader副本或Follower副本。

2. 生产者分区策略

  • 轮询策略(Round Robin):将消息均匀地分配到各个分区。Kafka使用散列表来实现轮询策略,以提高消息分配的效率。

  • 随机策略(Random):随机地将消息分配到各个分区。Kafka使用伪随机数生成器来实现随机策略。

  • 指定分区策略:根据消息的key或业务需求将消息分配到指定的分区。Kafka使用散列表来实现指定分区策略。

3. 消费者组机制

  • 分区分配:Kafka将分区分配给消费者组中的消费者。Kafka使用Zookeeper来存储分区分配信息。

  • 消费者偏移量:记录消费者消费到的最新消息偏移量。Kafka使用Zookeeper来存储消费者偏移量信息。

4. ISR集合

  • ISR(In-Sync Replicas)集合:与主副本保持同步的副本集合。Kafka使用Zookeeper来维护ISR集合信息。

5. 流处理

  • KStream API:用于构建实时流处理应用程序。KStream API提供了丰富的操作符,如map、filter、reduce等。

  • 状态存储:用于存储流处理应用程序的状态信息。Kafka的状态存储支持多种数据结构,如列表、集合、映射等。

  • 时间窗口:用于对数据进行时间窗口划分。Kafka的时间窗口支持滑动窗口和固定窗口。

6. 运维监控

  • 副本同步机制:监控副本同步状态,确保系统的可用性。

  • 日志清理策略:定期清理日志文件,提高系统的性能。

  • JMX指标:通过JMX接口获取系统性能指标。

7. 生态集成

  • Connect连接器:用于连接外部系统,如数据库、文件系统等。Connect连接器支持多种数据源和目标系统。

  • Schema Registry:用于管理数据结构,确保数据的一致性。Schema Registry支持多种数据格式,如Avro、JSON等。

  • KSQL引擎:用于查询和分析Kafka中的数据。KSQL引擎支持SQL语法,可以方便地进行数据查询和分析。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

- 💂 博客主页Java程序员廖志伟
- 👉 开源项目Java程序员廖志伟
- 🌥 哔哩哔哩Java程序员廖志伟
- 🎏 个人社区Java程序员廖志伟
- 🔖 个人微信号SeniorRD

Java程序员廖志伟

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

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值