RocketMQ原理—4.消息读写的性能优化

大纲

1.Producer基于队列的消息分发机制

2.Producer基于Hash的有序消息分发

3.Broker如何实现高并发消息数据写入

4.RocketMQ读写队列的运作原理分析

5.Consumer拉取消息的流程原理分析

6.ConsumeQueue的随机位置读取需求分析

7.ConsumeQueue的物理存储结构设计

8.ConsumeQueue如何实现高性能消息读取

9.CommitLog基于内存的高并发写入优化

10.Broker数据丢失场景以及解决方案

11.PageCache内存高并发读写问题分析

12.基于JVM OffHeap的内存读写分离机制

13.JVM OffHeap + PageCache的数据丢失问题

14.ConsumeQueue异步写入失败的恢复机制

15.Broker写入与读取流程性能优化总结

1.Producer基于队列的消息分发机制

(1)消息是如何发送到Broker去的

(2)消息发送失败会如何处理

(3)发送消息时有哪些高阶特性可以使用

(1)消息是如何发送到Broker去的

Producer发送消息时需要指定一个Topic,需要知道Topic里有哪些Queue,以及这些Queue分别分布在哪些Broker上。因此,Producer发送消息到Broker的流程如下:

首先,Producer会从NameServer中拉取Topic的路由信息,然后缓存本地的Topic缓存中,并每隔30s进行刷新。

然后,Producer会对获取到的Topic的Queues进行负载均衡,选择其中的一个Queue并找出对应的Broker主节点。

最后,Producer才会与这个Broker的主节点进行通信并发送消息过去。

图片

(2)消息发送失败会如何处理

如果Producer往Broker的主节点写入消息失败,那么就会执行重试——重新选择一个Queue和Broker主节点。此外,故障的Broker在一段时间内也不会再次被选中。这就是重试机制 + 故障退避机制。

Broker故障的延迟感知机制:Broker故障后,虽然NameServer会通过心跳 + 定时任务可以感知并摘除掉它,但该故障的Broker信息无需实时通知Producer。通过Producer端的重试机制 + 故障退避机制,就可以让Broker故障时也能做到高可用。

图片

(3)发送消息时有哪些高阶特性可以使用

按照Key进行Hash,比如让orderId相同的消息都进入同一个Queue里,以保证它们的顺序性。

2.Producer基于Hash的有序消息分发

一个Topic会有很多个Queue,这些Queue会落到各个Broker上。默认情况下,Producer往一个Topic写入的数据,会均匀地分散到各个Broker的各个Queue里。所以各个Broker的各个Queue里都会有一些Producer的数据。

那么发送到Topic里的数据,是否是有顺序的?其实一个Queue就代表了一个队列,当消息进入到同一个Queue时,这些同一个Queue里的消息便是有顺序的,但是不同的Queue之间的消息则是没有顺序的。

如果需要让某一类数据有一定的特殊顺序性,比如同样orderId对应的多条消息(下单->支付->发券)是有顺序的,那么唯一的选择就是让同样orderId对应的所有消息都进入同一个Queue,并保证它们在同一个Queue里是有顺序的。

具体的做法就是:根据消息的某个字段值对应的Hash值,对Queue的数量进行取模,按取模结果来选择Queue。从而实现同样的字段值对应同样的Queue,由此来实现顺序性。

3.Broker如何实现高并发消息数据写入

(1)数据持久化

(2)磁盘的随机写和顺序写

(3)内存的随机写和顺序写

(4)RocketMQ的消息写入

写消息的方式有两种:一是随机写,二是顺序写。写消息的落地有两种:一是内存,二是磁盘。

(1)数据持久化

一般来说,如果要持久化保存写入的消息数据,消息必须要落地到磁盘。如果消息只落地到内存,为了避免内存里的数据丢失,此时就需要设计一套避

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值