RocketMQ面试题大全

RocketMQ面试题大全


目录

文档索引

面试题汇总

Q:什么是消息中间件?有哪些消息中间件?你又是如何选型的?

Q:RocketMQ的总体架构,以及每个组件的功能

Q:什么是路由注册?RocketMQ如何进行路由注册?

Q:什么是路由剔除?RocketMQ如何进行路由剔除?

Q:什么是路由发现?RocketMQ如何进行路由发现?

Q:客户端NameServer选择策略

Q:Broker的部署方式

Q:Broker的刷盘策略有哪些?

Q:Broker的复制策略有哪些?

Q:Topic的配置信息

Q:使用RocketMQ过程中遇到过什么问题?又是怎么解决的?


文档索引

Quick Start - Apache RocketMQ


面试题汇总

Q:什么是消息中间件?有哪些消息中间件?你又是如何选型的?

A: 消息中间件:消息中间件-选型

Q:RocketMQ的总体架构,以及每个组件的功能

A:RocketMQ架构上分四部分构成:Producer、Consumer、Broker、NameServer

Producer

负责生产消息,通过MQ的负载均衡模块选择Broker集群队列进行消息投递,投递过程支持快速失败并且低延迟。

Consumer

消息消费者会从Broker服务器中获取消息,并对消息进行业务才处理

Broker

Broker主要用于存储和转发消息,Broker有几个子模块:

客户端管理器:管理客户端,并且维护consumer的的topic订阅信息

存储服务:提供简单api处理消息存储磁盘及消息查询功能

高可用服务:提供master和slave之间的消息同步功能

索引服务:为消息构建索引,并提供消息查找功能

NameServer

是一个轻量的注册中心,NameServer主要有以下两个功能

Broker管理:接受Broker集群的注册信息并保存作为路由信息的基本数据,提供心跳检测机制,检查Broker是否存活

路由信息管理:保存Broker集群整个路由信息和用于客户端查询的队列信息,Producer和Consumer通过NameServer获取整个Broker集群的路由信息,进行消息的投递和消费。

Q:什么是路由注册?RocketMQ如何进行路由注册?

A:Broker为证明自己存活,会将最新信息以心跳包的方式上报给NameServer,每30秒将BrokerId, Broker地址,Broker名称,所属集群名称等信息发送给NameServer,NameServer收到心跳包后会记录Broker的最新存活时间

Q:什么是路由剔除?RocketMQ如何进行路由剔除?

A:由于Broker关机,宕机或网络抖动等原因,NameServer会没有收到Broker的心跳,NameServer中有一个定时任务,每隔10秒扫描一次Broker表,查看每一个Broker的最新心跳时间戳距离当前时间是否超过120秒,如果超过,则会判定Broker时效,将该Broker从列表中剔除

Q:什么是路由发现?RocketMQ如何进行路由发现?

A:RocketMQ的路由发现采用的是PULL模型,当Topic路由信息出现变化时,NameServer不会主动推送给客户端,客户端默认每30秒会从NameServer中拉取一次最新的路由

Q:客户端NameServer选择策略

A:客户端首先产生一个随机数,与NameServer节点数量取模,然后进行连接,如果连接失败,则会采用round-robin策略,逐个尝试与其他节点连接

Q:Broker的部署方式

A:

1)单Master

单机模式, 即只有一个Broker

2)多Master模式

组成一个集群, 集群每个节点都是Master节点

3)多Master多Slave模式

每个Master配置一个Slave,集群中存在多对Master-Slave,生产常用该部署方式。

单Master多Master多Master多Slave模式
优点成本低性能高节点宕机可切换至Slave继续消费,保证可用性
缺点存在单点问题,不推荐宕机节点消息不能被消费成本高,性能较低

Q:Broker的刷盘策略有哪些?

A:

生产者将消息发送给Broker,此时Broker是将消息写入内存中,然后根据不同的刷盘策略,将消息持久化到磁盘中。

同步刷盘:当消息持久化当Broker磁盘后,消息才算是写入成功,Broker返回成功标识给到客户端

异步刷盘:当消息写入内存中,消息就算是写入成功,Broker返回成功标识给到客户端,不等待消息持久化到磁盘

同步刷盘异步刷盘
优点保证消息持久化成功吞吐量较高
缺点吞吐量较低宕机可能引起消息丢失

Q:Broker的复制策略有哪些?

A:

复制策略是Broker的master和slave之间的数据同步方式,分同步双写和异步复制

同步双写:只有master和slave都写成功以后,才会向客户端返回成功

异步复制:消息写入master成功后,就返回给客户端成功,不会等待Slave写入成功

同步双写异步复制
优点slave消息不会丢失性能较同步双写高
缺点吞吐量、性能较异步复制低10%节点宕机可能导致消息丢失

Q:Topic的配置信息

A:

Topic有两种模式进行创建,创建Topic时除TopicName外,还需配置读写队列数量及perm

创建模式

集群模式:创建的Topic在集群所有Broker中的Queue数量相同

Broker模式:创建的Topic指定存在哪些Broker中,并进行Queue数量设置

读写队列

物理上讲读写队列是同一个队列,读写队列是逻辑上进行区分,一般读写队列数量是相同的。

读写队列如设置不同数量,会存在消息不被消费或消费不到的问题,之所以如此设计,是为了方便Topic的缩容。

例如16个Queue的Topic如何缩容为8个Queue的Topic,如果读写队列同时减少为8,此时剩余的8个Queue里的消息将不被消费,如果先将写队列改为8,消费队列继续为16,等到剩下的8个队列都消费完了,再将消费队列改为8,这样就不会丢失消息。

perm

2表示只写,4表示只读,6表示读写

Q:使用RocketMQ过程中遇到过什么问题?又是怎么解决的?

A:

Consumer不消费消息问题

解决方案:Consumer数量应该小于等于订阅Topic的Queue数量,如果超出Queue数量,多出的Consumer将不能消费消息

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值