rocketmq 学习 - 面试

高可用保证:
NameServer 集群化部署
Rocketmq 解决思路:Broker主从架构与多副本策略。
简单说:Broker 有master与slave 两种角色。master收到消息后同步给slave。这样slave broker 就有一模一样的副本数据!这样master出现故障。slave 还有一模一样的数据,同样对外提供服务。保证MQ的可靠性与可用性。

在这里插入图片描述

Rocketmq 如何支持高并发的呢?

假如一台高性能机器,mq支持十万+并发。rocketmq可以集群部署,部署多台。假如每台支持十万+的请求,我们只需要将请求均匀分散到多台机器上,保证每台请求QPS不超过10万即可。

数据路由,怎么知道访问哪个Broker?

所有的Broker都把自己注册到NameServer 上! 这样NameServer知道集群有哪些Broker。知道所有的Broker信息!
如果NameServer集群化,Broker将自己注册到所有的NameServer上,达到高可用。假如一个NameServer挂了,其它NameServer同样存在所有broker信息
对于我们应用系统来讲,也会找NameServer要、获取路由信息,去查找对应的Broker信息。

系统如何从NameServer获取Broker信息

定时,每隔一段时间从NameServer拉取最新Broker集群信息。

心跳机制,NameServer如何知道Broker是否存活

30秒心跳机制 120s 故障感知机制

  1. Broker 每30s 给所有的NameServer 发送心跳。告诉每个NameServer 他还活着。
  2. NameServer 收到心跳包后,更新Broker 心跳时间。
  3. 每隔10s NameServer 检测Broker 心跳时间。如果某个Broker 超过120s都未发送心跳。则可以认为Broker 已经挂掉。

Broker挂了,系统如何感知呢?

两种解决思路:

  1. broker挂了,可以发送给其它broker。
  2. 如果系统必须发送给那个broker。他slave机器有一个备份。等一会可以继续使用。是否考虑再等一等。

Master Broker 如何同步消息到Slave Broker 的?

Slave节点主动向Master节点拉取数据,PULL模式

Broker 节点是采取读写分离模式吗?

不是! 消费者有可能从master节点拉取消息,也有可能从slave节点拉取消息。
消费者从master节点拉取消息后。master根据自身的负载情况与slave 节点同步情况,建议下一次从master节点拉取还是从slave节点拉取。

slave 节点挂了对系统有应用吗?

有影响的! 但不大。消息写入都是走master 节点的。消息读取也是走master节点。只是有部分消息读取是走,slave节点。
只是slave节点挂了,全部的压力都打到master 节点上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jiguansheng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值