实际生产中,应该使用什么模式来搭建rocketMQ集群?

在实际生产环境中,如果使用rocketMQ作为消息队列,一般都会搭建集群,只有一台master机器的都是用来学习和测试用的,基本不会用。

结论

先给出最终结论:
在实际生产中,rocketMQ集群的最佳实践是:配置多个master机器+RAID10磁盘阵列,然后为每一个master机器都配备一个slaver机器即可,这样既利用了RAID10磁盘阵列的高效,又保证了消息的安全性,还解决了可能影响订阅的问题。

分析

下面是分析:
首先我们来了解一下rocketMQ的复制和刷盘策略。
复制也就是将数据从master复制到slaver的过程(备份)。刷盘就是将数据从内存cpu存到磁盘的过程。

我们看看下图
在这里插入图片描述

生产者生成消息,再发送消息给Broker集群中的master机器,在master机器有将数据从cpu存入磁盘的过程,也就是刷盘。然后将数据从master机器同步到slaver机器,而slaver机器也要进行刷盘。由此就会由于复制的策略不同,导致出现不同的问题

复制策略,分为同步复制和异步复制:

同步复制:消息写入master后,master会等待slaver同步数据成功后,才会想生产者返回成功ACK。
异步复制:消息写入master后,master会立即向生产者返回成功ACK,无需等待slaver同步数据成功。

同步复制的优点就是安全,不会丢失一条消息。缺点就是会导致RT时间过长,降低系统吞吐量。

异步复制的优点就是速度快,接收到消息就立马回复,每条消息的时长会很短,系统吞吐量较高。但是会导致丢失少量消息,因为异步复制时,master接收到消息就立刻回复成功,还没写入磁盘呢,就由于其他原因挂了,导致cpu中的消息丢失了,生产者此时又接收到了成功的ACK,认为broker已经接收了消息,就不会重发,直接发下一条消息了,导致上一条消息丢失。

ps(一般情况下,生产环境中,都是用异步复制)

然后我们要知道rocketMQ有哪些搭建集群的方式。除了单master这种用来学习和测试的模式,主要有以下两种方式:

1、多master多slaver模式–异步复制

broker集群由多个master构成,每个master又配置了多个slaver(在配置了RAID10的情况下,每个master配置一个slaver即可),master和slaver是主备关系,即master负责处理消息的读写请求,而slaver仅仅复制消息的备份以及在master宕机后的角色切换。
异步复制即前面所讲的复制策略中的异步复制策略,即master接收到消息后,会立即向生产者返回成功ACK,无需等待slaver同步数据成功。
该模式的最大特点之一是,当master宕机后,slaver能够自动切换为master,不过由于slaver从master的同步会有短暂的延迟(毫秒级),可能会在master宕机后丢失微量消息。

RAID10磁盘阵列是大学时计算机原理这门课程会讲的,我才毕业一年,还是有点印象的。在这里的作用主要就是防止数据丢失。而RAID10其实就是RAID1与RAID0的一个合体。
磁盘阵列的介绍:https://zhuanlan.zhihu.com/p/51170719

2、多master多slaver模式–同步双写

该模式是多master多slaver的同步复制实现,所谓同步复制,正如上面复制策略中的介绍一样:master会等待slaver同步数据成功后,才会想生产者返回成功ACK。即双写。所以也是有降低吞吐量的问题。并且在当前版本下(2021年8月3日的4.9版本),在master宕机后,slaver不能自动切换为master。一旦发送宕机,就会造成大量消息丢失。

-所以说综合以上两种部署集群的方式,还是使用多master多slaver–异步复制并搭配RAID10磁盘阵列才是最佳的选择,兼具安-全和速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三七有脾气

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值