RocketMQ面试题及答案

22道常见RocketMQ面试题以及答案 半消息:是指暂时还不能被Consumer消费的消息,Producer成功发送到broker端的消息,但是此消息被标记为“暂不可投递”状态,只有等Producer端执行完本地事务后经过二次确认了之后,Consumer才能消费此条消息。当一条消息初次消费失败,消息队列 RocketMQ 会自动进行消息重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息,此时,消息队列 RocketMQ 不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。 阅读详情

1.多个MQ如何选型?

RabbitMQ:erlang开发,对消息堆积的支持并不好,当大量消息积压的时候,会导致RabbitMq的性能急剧下降,每秒可以处理几万到几十万条消息。

RocketMQ:java开发,面向互联网集群化,功能丰富,对在线业务的响应延迟做了很多优化,大多数情况下可以做到毫秒级的响应,每秒钟大概能处理几十万条消息。

kafka:scala开发,面向日志,功能丰富,性能最高,当你的业务中,每秒钟消息数量没那么多的时候,Kafka的时延反而会比较高,所以kafka不太适合在线业务场景。

ActiveMQ:java开发,简单,稳定,性能不如其他的,小型系统用也可以,但不推荐使用。

2.为什么要使用MQ?

解耦:降低系统之间的耦合度。
异步。
流量削峰:请求达到峰值后,后端service开可以用固定消费速率消费,不会被压垮。

3.RockerMQ有哪些角色组成?

nameServer:无状态,动态列表。
producer:消息生产者,负责发送消息到broker。
broker:就是MQ本身,负责收发消息,持久化消息等。
consumer:消息消费者,负责从broker上拉取消息进行消费,消费完进行ack。

4.MQ的工作流程?

1.启动nameServer,nameServer启动后开始监听端口,等待Broker Producer,Consumer连接。

2.启动Broker时,Broker会与所有nameServer建立并保持长连接,然后每30秒向nameServer定时发送心跳包

3.发送消息前,可以先创建Topic,创建Topic时需要指定该Topic要存储在哪些Broker上,当然,在创建Topic时也会将Topic与Broker的关系写入到NameServer中,不过这步时可选的,也可以在发送消息时自动创建topic。

4.Produce发送消息,启动共时先跟nameServer集群中的其中一台建立长连接,并从nameServer中获取路由信息,即当前发送的Topic消息的queue与broleer的地址的映射关系,然后根据算法策略从队列选择一个queue,与队列所在的Broker建立长连接,从而向broker发送消息,当然,在获取到路由信息后,producer会首先将路由信息缓存到本地,再每30秒从nameServer更新一次路由信息。

5.Consumer跟Producer类似,跟其中一台NameServer建立连接,获取其所订阅Topic的路由信息,然后根据算法策略从路由信息中获取到其所要消费的Queue,然后直接跟broker建立长连接,开始消费其中的消息,Consumer在获取到路由信息后,同样也会每30秒从nameService更新一次路由信息,不过不同与producer的是,Consumer还会向broker发送心跳,以确保broker的存活状态。

5.RocketMQ Broker中的消息被拉取后会立即删除吗?

不会,每条消息都会持久化到CommitLog中,每个Consumer连接到Broker后维持消费进度信息,当消息消费后只是当前Consumer的消费进度更新了。

6.消息会堆积吗?什么时候清理过期的消息?

如果消息出现堆积可能有三种情况:
1.消息的生产者生产消息过快。
2.broker发生了阻塞。
3.消息的消费者消费消息过慢。

4.6版本默认48小时后会删除,不再使用commitLog文件
检查这个文件的最后访问时间
判断是否大于过期时间
指定删除时间,默认凌晨4点

7.RockerMQ有几种消费模式?

集群消费:一条消息指挥被同group的一个consumer消费,多个group同时消费一个topic时,每个group都会有一个consumer消费到数据。

广播消费:消息将对一个consumer group下的各个consumer实例都消费一遍。

8.消费消息是push 还是 pull?

RockerMQ没有真正意义上的push,都是pull,虽然有push类,但实际上底层实现采用的都是长轮询机制。

9.为什么要主动要拉取消息, 而不是使用事件监听方式?

1.事件驱动方式时建立好长连接,由事件(发送数据)的方式来实时推送。

2.如果Broker主动推送消息的话,有可能push速度快,消费速度慢,那么就会造成消息再consumer端堆积过多,同时又不能被其他consumer消费的情况,而pull的方式可以根据当前自身情况来pull,不会造成过多的压力而造成瓶颈,所以采取了pull方式。

10.消息会重复消费吗?

引起重复消费的原因有两个:
ACK问题:正常情况下再consumer真正消费完消息后应该发送ack通知broker该消息已经正常消费,从queue中剔除,当ack因为网络原因无法发送到broker,broker会认为该消息没有被消费,此后会开启消息重推机制把消息再次投递到consumer。
消费模式:在clustering模式下,消息在broker中会保证相同group的consumer消费一次,但是针对不同的group的consumer会推送多次。

解决方案就是采用唯一标识,防止消费重复数据。

11.如何让RockerMQ的消息保证顺序消费?

queue时典型的FIFO,天然顺序,多个queue同时消费时无法绝对保证消息的有序性,所以同一个topic,同一个queue 发消息的时候,一个线程去发送消息,消费的时候一个线程去消费一个queue里的消息。

12.怎么保证消息发送到同一个queue上?

rocket mq给我们提供了一个messageQueueSelector接口,可以自己重写里面的接口,实现自己的算法。

13.RockerMQ如何保证消息不丢失?

producer端:可以采取send() 同步发消息,发送结果时同步感知的,发送失败后可以重试,设置重试次数,默认3次。

broker端:可以将刷盘策略改为同步刷盘,默认情况下时异步刷盘。 consumer端:完全消费正常后在进行手动ack确认。

14.RocketMQ消息堆积如何处理?

首先要找到消息堆积的原因,是producer太多,还是consumer太少,还是消息消费速度异常,正常的话,可以上线更多的consumer临时解决消息堆积问题。

15.消息堆积时间长, 消息会超时吗?

不会超时,因为RocketMQ中的消息,只会在commitLog被删除的时候才会消失,不会超时,也就是说,未被消费的消息不会存在超时删除的情况。

16.堆积的消息会不会进私信队列?

不会,消息在消费失败后进入重试队列,默认重试16次,16次之后才会进入死信队列。

17.高吞吐量下如何优化生产者和消费者?

同一个group下,多机部署,并行消费 单个consumer提高消费线程个数。 批量消费。

18.RocketMQ是如何保证数据的高容错性?

1.在不开启容错的情况下,轮询队列进行发送,如果失败了,重试的时候过滤失败的Broker。
2.如果开启了容错策略,会通过RocketMQ的预测机制来预测一个broker是否可用。
3.如果上次失败的broker可用,那么还是会选择该broker的队列。
4.如果上述情况失败,则随机选择一个进行发送。
5.在发送消息的时候会记录一下调用的时间与是否报错,根据该时间去预测broker的可用时间。

19.任何一台broker突然宕机了怎么办?

broker主从架构以及多副本策略,master收到消息后,会同步给slave,这样一条消息就不止一份了。master宕机了还有slave中的消息可用,保证了mq的可靠性和高可用性。

20.Broker把自己的信息注册到哪个namerserver上?

broker会向所有的nameServer注册自己的信息

21.为什么自己写nameserver而不用ZK呢?

1.nameServer是自己写的,方便扩展去中心化,只要有一个nameServer在 ,整个注册中心环境就可以使用。
2.Zookeeper选举需要满足过半机制才可以使用。

【Rocket MQ】面试题18道 【代码】【Rocket MQ】面试题18道。 阅读详情

相关推荐

RocketMQ经典高频面试题大全(附答案

编程界的小学生0、彩蛋1、说说你们公司线上生产环境用的是什么消息中间件?2、多个mq如何选型?3、为什么要使用MQ?4、RocketMQ由哪些角色组成,每个角色作用和特点是什么?5、RocketMQ中的Topic和JMS的queue有什么区别?6、RocketMQ Broker中的消息被消费后会立即删除吗?追问:那么消息会堆积吗?什么时候清理过期消息?7、RocketMQ消费模式有几种?8、消费消息是push还是pull?追问:为什么要主动拉取消息而不使用事件监听方式?9、broker如何处理拉取请求的?1

【原】编程界的小学生 3万+

RocketMQ面试题(23道)】

介绍RocketMQ的基本原理、优缺点、消费模式、消费模型、基本架构、如何保证消息的可用性、顺序消费的实现、如何保证高可用等面试问题

独上高楼,望尽天涯路。 2万+

RocketMQ常见面试题答案梳理

半消息是只生产者向broker发送消息时,还没经过两次确认的消息,此时的状态标记为“不可消费”状态,所以暂时对消费者不可见9.消息的可用性,RocketMQ如何能保证消息的可用性/可靠性?当一条消息无法正常消费的时会被投递到死信队列,比如一条消息初次消费失败或超时,消息队列会自动进行消费重试累计默认16次;达到最大重试次数后,消息队列不会立刻将消息丢弃而是暂时存放到死信队列中。死信队列的特征死信消息会保存三天后(CommitLog的过期时间)被删除。

qq_38038507的博客 2368

RocketMq常见面试题

rocketmq常见面试题

qq_42877546的博客 2万+

常见的RocketMQ面试题及其简要答案

以上是一些常见的RocketMQ面试题及其简要答案。在准备面试时,建议深入理解这些问题的答案,并结合实际项目经验进行阐述。

qq_30009397的博客 1182

RocketMQ 面试题答案整理,最新面试题

它确保所有已提交的消息都写入磁盘,即使在系统崩溃的情况下,也能够恢复这些消息。部署全面的监控系统,对生产环境中典型场景:消息堆积、消息收发失败等场景配置合理的监控预警,快速发现问题,定位问题。主题是消息分类的标志,生产者将消息发送到特定的主题,而消费者从主题中订阅消息。RocketMQ提供了多个预设的延迟级别,例如1s、5s、10s等,这些都可以在Broker的配置文件中设置。RocketMQ的消费者采用Pull模式,消费者从Broker拉取消息,可以根据消费者的能力进行负载均衡。

知识极客 2373

2022年RocketMQ面试题答案

消息消费失败之后,会自动进行消息重试,如果达到了重试的次数仍然消费失败,会将该消息发送到死信队列,死信队列的消息不会被消费者正常消费,有效期为3天,3天之后自动删除,一个死信队列对应一个group id,控制台支持对死信消息的查询、重发、导出。迁移消息到临时topic:如果队列的个数小于消费者的个数,增加消费者也不会提高消费能力,新建一个临时的topic,用几个消费者直接将消息丢到临时的topic,然后创建几个消费者去消费临时的topic,这样也是间接的加大消费能力。

未知的未来,冲鸭 2268

RocketMQ高手之路系列之二:RocketMQ之消息通信,java常见面试题答案

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

m0_54816834的博客 856

Java面试题以及答案---RocketMQ

因为项目比较大,做了分布式系统,所有远程服务调用请求都是同步执行经常出问题,所以引入了mq生产者(Producer):负责产生消息,生产者向消息服务器发送由业务应用程序系统生成的消息。消费者(Consumer):负责消费消息,消费者从消息服务器拉取信息并将其输入用户应用程序。消息服务器(Broker):是消息存储中心,主要作用是接收来自 Producer 的消息并存储, Consumer 从这里取得消息。

Aa112233aA1的博客 388

2023 RocketMQ精选面试题答案

面试题合集:包含MySQL,spring系列,mq系列,缓存系列,中间件系列等

weixin_46389673的博客 603

高频经典RocketMQ面试题答案,24道RockerMQ八股文,面渣逆袭必看

当然:类比一下我们生活的邮政系统——邮政系统要正常运行,离不开下面这四个角色, 一是发信者,二 是收信者, 三是负责暂存传输的邮局, 四是负责协调各个地方邮局的管理机构。对应到 RocketMQ 中,这四个角色就是 Producer、 Consumer、 Broker 、NameServer。在操作系统中,使用传统的方式,数据需要经历几次拷贝,还要经历用户态/内核态切换。从磁盘复制数据到内核态内存;从内核态内存复制到用户态内存;然后从用户态内存复制到网络驱动的内核态内存;

程序员江小北 2919

RocketMQ经典高频面试题大全(附答案)_rocketmq面试题

Consumer和queue会优先平均分配,如果Consumer少于queue的个数,则会存在部分Consumer消费多个queue的情况,如果Consumer等于queue的个数,那就是一个Consumer消费一个queue,如果Consumer个数大于queue的个数,那么会有部分Consumer空余出来,白白的浪费了。多个queue同时消费是无法绝对保证消息的有序性的。同一topic,同一个QUEUE,发消息的时候一个线程去发送消息,消费的时候 一个线程去消费一个queue里的消息。

2401_87021048的博客 846

RocketMQ经典高频面试题大全(附答案)_rocketmq面试题(1)

消息将对一 个Consumer Group 下的各个 Consumer 实例都消费一遍。即即使这些 Consumer 属于同一个Consumer Group ,消息也会被 Consumer Group 中的每个 Consumer 都消费一次。

2401_87021035的博客 717
上一篇: Springboot 调用mysql的.sql文件,执行mysql语句
下一篇: MyBatis-Plus 分页设置不生效
会_飞_的猪
博客等级 码龄9年 7粉丝 14原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值