RocketMQ 架构图
2024-02-16 16:50:26 47 举报
RocketMQ 是一款分布式消息中间件,具有高性能、高可靠、高扩展性等特点。其架构图主要包括四个部分:Producer(生产者)、Broker(消息中间件服务器)、Consumer(消费者)和NameServer(命名服务)。Producer负责生产消息并发送到Broker,Broker接收并存储消息,Consumer从Broker中拉取消息进行消费。NameServer负责管理Broker集群的路由信息,提供Producer和Consumer查询Broker的服务。整个系统采用分布式设计,支持横向扩展,能够满足大规模消息处理需求。
作者其他创作
大纲/内容
后台线程
磁盘文件
CommitLog
消息消费线程
listener.consumeMessage()业务自己实现的监听
brokerName 相同(同一组)
策略:Hash(同队列顺序)、轮询
消费者组 ConsumerGroup(订阅同一 Topic)
message
HAClient主从请求线程
每个 Broker 都会注册
写入数据
1. 写入
性能约等于内存随机写
Peers对等集群架构设计
负载均衡
write queues
Topic 缓存
读取消息
发送消息(主节点)
2. 主动触发
失败重试换一个主 Broker 重新写入
SUCESSRECONSUME_LATER
offset 之后的数据发送回去
业务系统
根据 offset 读取消息数据
size4 字节
Broker数据存储节点brockerId>0 --> 从
Topic(逻辑概念)
NameServer注册中心
Consumer
ConsumerGroup 消费进度业务系统内存存储
Client
写入消息
主从同步机制
消息
read queue
IndexFile
Broker(JVM 进程)
每个 queue 可以认为是磁盘上的一个文件,记录 offset 偏移量
业务逻辑功能和代码
处理消息
PullMessageService循环拉取消息
读队列
写队列
read queue
Broker主节点
内部实现(源码)
brokerClusterName 相同(同一集群)
监听
Broker数据存储节点brockerId=0 --> 主
broker busy异常(broker 过于繁忙)当 Page Cache 竞争太激时触发【手动开关,慎重考虑】
Broker 内部
2、响应(提交进度、成功/失败)
发送消息指定一个 topic,获取 topic 有哪些 queue,这些 queue 分布在哪些 broker 内
每个 Consumer 启动时会向所有 Broker 注册
无通信
offset偏移量
jvm offheap堆外内存
异步提交
关联
包含消息在 commitlog 索引
RebalanceService拉取元数据信息 分组、queue从 NameServer / Broker 都可以拿到
异步刷盘
连接
ConsumeQueue
1、拉取消息(可主可从)
消费进度(内存)
发送同步请求max offset
每隔 30s发起一次心跳
Page Cache
请求处理器
根据消息属性查找
Producer
根据 offset 读取数据
hash8 字节
定时刷新
消费 + 数据持久化
500ms
Broker数据存储节点brockerId>0 --> 从
辅助消息检索
主从同步
内存映射
创建
根据 offset 定位到磁盘文件起始位置读取 size 大小的数据
offset8 字节
写入索引
ProcessQueue数据结构
主从同步push 主推pull 从拉
消息写内存
10s 元数据同步
每隔 10s 检查120 内没有心跳摘除 broker
ConsumerGroup 消费进度
HAConnection从节点连接
心跳数据
真正写消息(顺序写)
成功/失败
3. 满足 4 页flush
虚拟概念
4. 真正写消息(顺序写)
选一
查询 broker 列表(任意一台NameServer)
拉取 topic 路由信息每隔 30s 刷新
运行
Brocker 集群(两主两从)
收藏
0 条评论
下一页