实际生产中,应该使用什么模式来搭建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磁盘阵列才是最佳的选择,兼具安-全和速度。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~