[rocketmq] 浅谈结构

RocketMQ中,NameServer负责Topic和路由信息管理,无状态可扩展;Broker注册到NameServer,处理消息存储、投递和高可用;Producer发送消息至Broker,Consumer定时获取路由信息;心跳机制用于检测Broker状态;消息存储包括CommitLog和MessageQueue,支持同步/异步刷盘策略;集群设计保证数据安全。
摘要由CSDN通过智能技术生成

rocketmq 结构

在这里插入图片描述

NameServer :几乎是无状态节点,可横向扩展,节点之间无消息同步,主要负责对源数据的管理,包括对于Topic和路由信息的管理。

每个 Broker 在启动的时候会到 NameServer 注册,Producer 在发送消息前会根据 Topic 到 NameServer 获取到 Broker 的路由信息,Consumer 也会定时获取 Topic 的路由信息。

Broker:,定时扫描 producer 链接,主要负责消息的存储、投递和查询以及服务高可用保证 ,单个 broker 与所有 nameserver 有长链接,定时将topic信息注册到nameServer

Producer:负责产生消息,通过多种负载均衡模式发送到Broker集群。从 nameserver 获取 topic 信息。启动时会在 nameserver 注册,发消息前会从 nameserver 获取信息。

Comsumer :定时从 nameserver 获取 borker 信息,从broker获取 topic 队列消息,支持push和pull两种获取消息的模式,支持集群和广播消费,提供实时的消息订阅机制。
pull主动从消息服务器拉取消息,只要批量拉取到消息用户就会启动消费过程
push 封装消息的拉取、消费进度等,将消息到达时执行的回调接口留给用户应用程序实现,首先要注册消费监听器,当监听器触发后才开始消费消息。

心跳机制

broker会每隔30秒向NameServer发送一个的心跳 ,NameServer收到一个心跳会更新对应broker的最近一次心跳事件,然后NamServer会每隔十秒运行一个任务,去检查一下各个broker的最近一次心跳的时间,如果超过120s没有收到相应broker的心跳,则判定对应的broker已经挂掉。

集群

nameserver 是无状态的,所以可横向扩展,producer 和 consumer 都是由业务端控制,所以是业务集群,rocketmq 中 broker 为保障数据不丢失,此集群为主从模式

消息存储

消息存储是由 message queue 和 commitlog 一起完成的

commitlog 存储消息,是物理存储,顺序写,随机读。
messageQueue 是逻辑存储, 文件夹的组织方式如下:topic/queue/file。存储指向 commitlog 的具体位置,会持久化,保存了指定 Topic 下的队列消息在 CommitLog 中的起始物理偏移量 offset ,消息大小 size 和消息 Tag 的 HashCode 值

一个 topic 可能有多个 message queue, offset 指一个消息在某一个 message queue 下的具体位置,通过 offset 可以定位某一个消息

同步刷盘/异步刷盘

异步刷盘:返回写成功状态时,消息可能只是写入 pagecache 中,等消息积累到一定程度会刷新到磁盘中
同步刷盘:返回写成功状态时,消息已经保存到磁盘中,消息写入 pagecache 时立刻通知刷盘线程刷盘,刷盘成功后唤醒线程,返回消息写成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荼白z

感谢老板请我喝咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值