RocketMQ面试题
1.请描述一下RocketMQ与kafak的区别?
RocketMQ是根据kafak的架构原型设计出来的,有很多地方都相似,consumer、producer、broker,甚至RocketMQ初期也是用zookeeper做注册中心。
首先RocketMQ吞吐量TPS是在10万级别,kafak到了百万级别,RocketMQ貌似比kafak的tps小
这是由消息存储架构决定的,kafak采用的是每个Partition(类比于RocketMQ的queue)一个文件,而RocketMQ采用的是所有topic都存储在一个文件commitLog(超过1个G会重建一个文件)。那mq中影响tps的两个关键因素:消息写入(生产)、消息读取(消费)。
- 消息写入
在这一块kafak和rocketmq设计和使用到的技术基本一致:
1) 顺序写入
2) 利用OS提供的pageCache来实现mmap(内存映射文件),java中是通过NOI提供的MappedByteBuffer类具体实现的
- 消息读取
两者都采用了一个技术叫做零拷贝,这样就不用先将磁盘内容从内核空间(磁盘的)拷贝到用户空间,再从用户空间拷贝到内核空间(socket的),而是直接从内核转到内核,java里面是通过NIO提供的FileChannel实现。
由于RocketMQ所有topic消息都存在一个文件中,读取是根据consumerQueue文件里的offset去读取的,所以是随机读取。正因为此,RocketMQ的TPS不如kafak。
除此之外还有一个原因:
kafka采用异步发送的机制,当发送一条消息时,消息并没有发送到broker而是缓存起来,然后直接向业务返回成功,当缓存的消息达到一定数量时再批量发送。此时减少了网络io,从而提高了消息发送的性能,但是如果消息发送者宕机,会导致消息丢失,业务出错,所以理论上kafka利用此机制提高了io性能却降低了可靠性。
那RocketMQ为什么要这样设计?
- kafak中Producer调用发送消息接口,消息未发送到Broker,向业务返回成功,此时Producer宕机,会导致消息丢失,业务出错,这样看来kafak可靠性不如RocketMQ,这也是RocketMQ作为互联网金融业务的首选;
- kafka是一个分区一个文件。当topic过多,分区的总量也会增加,kafka中存在过多的文件,当对消息刷盘时,就会出现文件竞争磁盘,出现性能的下降。
而且,一个分区只能被一个消费组中的一个消费线程进行消费,因此可以同时消费的消费端也比较少。
其他区别请看这里
本文引用
blog.csdn.net/z69183787/a…
www.cnblogs.com/cai-cai777/…
RocketMQ为什么自研nameserver而不用zk?
- RocketMQ只需要一个轻量级的维护元数据信息的组件,为此引入zk增加维护成本还强依赖另一个中间件了。
- RocketMQ追求的是AP,而不是CP,也就是需要高可用。
- zk是CP,因为zk节点间通过zap协议有数据共享,每个节点数据会一致,但是zk集群当挂了一半以上的节点就没法使用了。
- nameserver是AP,节点间不通信,这样会导致节点间数据信息会发生短暂的不一致,但每个broker都会定时向所有nameserver上报路由信息和心跳。当某个broker下线了,nameserver也会延时30s才知道,而且不会通知客户端(生产和消费者),只能靠客户端自己来拉,rocketMQ是靠消息重试机制解决这个问题的,所以是最终一致性。但nameserver集群只要有一个节点就可用。
msgKey,msgId,offsetMsgId的区别
blog.csdn.net/prestigedin…
index file用来做索引的key,如果发送端设置了msg key,则用这个,如果没有,则用msgId,因为msgId是生产端生成的全局唯一id
以下是一些学习资料!
- rocketmq简单的消息发送接收案例
- Springboot集成RocketMq(消息的发布与订阅)
- rocketmq API 生产者与消费者,springboot集成RocketMQ
- RocketMq整合springBoot的日常使用
- 如何在SpringBoot中使用RocketMQ原生API
- RocketMQ之消息的多种订阅方式&消息过滤器
相关推荐
RocketMQ精选面试题50道(含答案解析)
最新RocketMQ 面试题及答案【附答案解析】RocketMQ 面试题大全带答案,RocketMQ面试题最新面试题
java面试题_消息中间件--RocketMq(14题).pdf
1. 消息可靠性: 2. 消息低延迟: 3. 每个消息⾄少投递⼀次: 4. 每个消息只消费⼀次: 5. Broker的Buffer满了怎么办? 6. 回溯消息: 7. 消息堆积: 8. 分布式事务: 9. 定时消息: 10. 消息重试: 11. RocketMq是什么? 12. RocketMq物理部署结构 13. RocketMq逻辑结构 14. RocketMq数据存储结构
java面试题_消息中间件--RocketMq(14题).zip
java面试题_消息中间件--RocketMq(14题).zip
RocketMQ面试题.pdf
技术栈面试题
【消息中间件】Kafka+RabbitMQ+RocketMQ核心架构与高可用机制:大厂高频面试题深度解析与实战优化方案
内容概要:本文系统梳理了Kafka、ActiveMQ、RabbitMQ、RocketMQ四大主流消息中间件的高频面试题,涵盖核心架构、底层原理、工作流程、实战场景、代码实现及生产环境踩坑案例。每部分均按“面试深度、底层原理、工作流程图、实战场景、代码实现”五个维度展开,重点解析Kafka的高吞吐机制、RabbitMQ的交换机路由、RocketMQ的分布式事务与顺序消息等核心技术,并提供真实生产问题的排查思路与解决方案,内容紧贴大厂面试标准,强调可背诵、可落地。; 适合人群:具备一定Java基础,从事后端开发1-3年,准备应对互联网大厂面试的研发人员;尤其适合需深入掌握消息中间件原理与实战的中级开发者。; 使用场景及目标:①系统掌握Kafka、RabbitMQ、RocketMQ等中间件的核心机制与面试高频考点;②理解消息丢失、重复消费、消息堆积等问题的成因与解决方案;③通过手绘流程图与极简代码快速构建答题模板,提升面试表达力与技术深度。; 阅读建议:此资料为“大厂背诵版”,建议结合自身项目经验,重点记忆各中间件的对比差异、核心机制(如ISR、镜像队列、事务消息)及踩坑案例,配合手绘流程图强化理解,做到“背会即用”,特别关注高频追问部分以应对深度技术面。


