1、今日任務(wù)
- RocketMQ 是如何集群化部署承載高并發(fā)請(qǐng)求的?
- RocketMQ 是如何存儲(chǔ)海量海量信息的,如何實(shí)現(xiàn)分布式存儲(chǔ)的?
- RocketMQ 是如果 Master 節(jié)點(diǎn)掛掉了怎么辦?豈不是會(huì)丟失一部分?jǐn)?shù)據(jù)
- RocketMQ 是如何知道要發(fā)送到哪些 Broker 上去的?
2、MQ 如何集群化 部署承載高并發(fā)請(qǐng)求?
一臺(tái)高配置的機(jī)器,部署了 RocketMQ 之后,可以支持 10 萬(wàn)+并發(fā)的訪問(wèn),
答案: RocketMQ 可以集群化部署,可以部署再多臺(tái)機(jī)器上面,每臺(tái)機(jī)器可以承載 10 萬(wàn)+的高并發(fā)請(qǐng)求,那么 RocketMQ 集群就可以承載幾十萬(wàn)+并發(fā)請(qǐng)求。
3、RocketMQ 如何存儲(chǔ)海量消息的?
RocketMQ 收到消息之后,不會(huì)里面就讓消費(fèi)者進(jìn)行消費(fèi),而是先將消息存儲(chǔ)到自己的本地磁盤中,等需要消費(fèi)的時(shí)候再進(jìn)行處理。
答案:每臺(tái)機(jī)器上部署的 RocketMQ 進(jìn)程稱之為 Broker,每個(gè) Broker 會(huì)收到不同的消息,然后每個(gè) Broker 就會(huì)將收到的消息存儲(chǔ)到自己的本地磁盤中。
RocketMQ 存儲(chǔ)海量消息機(jī)制的關(guān)鍵是可以實(shí)現(xiàn)分布式存儲(chǔ),將海量消息均衡的分布在 RocketMQ 集群的各臺(tái)機(jī)器,這樣每臺(tái)機(jī)器可以存儲(chǔ)部分消息數(shù)據(jù),多臺(tái)機(jī)器既可以存儲(chǔ)海量消息。
4、RocketMQ是如何保證高可用的?如果Broker宕機(jī)了怎么辦?豈不是部分消息數(shù)據(jù)會(huì)丟失。
Rocket進(jìn)程簡(jiǎn)稱為Broker,一個(gè)RocketMQ有多個(gè)Broker,每個(gè)Broker存儲(chǔ)部分消息數(shù)據(jù),如果Broker宕機(jī)了,豈不是會(huì)丟失部分的數(shù)據(jù)。
答案:RocketMQ實(shí)現(xiàn)高可用機(jī)制的關(guān)鍵是 Broker主從機(jī)制和多副本策略。Broker有兩種角色,Master 和 Slave,一個(gè)Broker最少有一個(gè)Master節(jié)點(diǎn),一個(gè)Slave節(jié)點(diǎn)。 Master Node收到消息之后,會(huì)將消息同步給Slave節(jié)點(diǎn),只有Master Node收到了消息,并且成功將消息同步給了Slave節(jié)點(diǎn),這條消息才算是真正的發(fā)送成功了。
如果Master節(jié)點(diǎn)宕機(jī)了,Slave節(jié)點(diǎn)有一份冗余消息數(shù)據(jù),不會(huì)導(dǎo)致數(shù)據(jù)丟失,并且還能繼續(xù)對(duì)外提供服務(wù),保證MQ的高可用。
5、數(shù)據(jù)路由:怎么知道要訪問(wèn)那些Broker
答案: RocketMQ集群有一個(gè)NameServer集群,獨(dú)立部署再其他機(jī)器上,Broker啟動(dòng)的時(shí)候,會(huì)向NameServer進(jìn)行注冊(cè),NameServer包含了所有Broker節(jié)點(diǎn)的元數(shù)據(jù)信息。
如果要發(fā)送數(shù)據(jù)到Broker,會(huì)先找NameServer,從中獲取Broker信息,然后再想Broker發(fā)送消息數(shù)據(jù)。