面试Java高级工程师之RocketMQ总结

ActiveMQ、RabbitMQ、Kafka、RocketMQ在事务性消息、性能、高可用和容错、定时消息、负载均衡、刷盘策略的区别 ActiveMQ、RabbitMQ、Kafka、RocketMQ这四种消息队列在事务性消息、性能、高可用和容错、定时消息、负载均衡、刷盘策略等方面各有其特点和差异。 阅读详情

一、rocketmq是什么?为什么要用?

1、消息中间件,具有高性能、低延迟和高可靠特性

2、主要用来系统解耦、流量削锋、异步处理以提升系统性能

二、使用rocketmq有哪些缺点?

1、系统可用性降低

2、系统复杂度提高

3、事务一致性问题

三、rocketmq和kafka有什么区别?

1、单机吞吐量:两个都是10万级别,高吞吐量

2、topic数量看吞吐量:rocketmq达到几百几千吞吐量会有较小幅度下降,kafka几十到几百会大幅下降

2、时效性:rocketmq毫秒级别,kafka毫秒以内

3、可靠性:都可以做到消息零丢失

4、可用性:都是高可用,分布式架构

四、rocketmq部署架构是怎么样的?

分为四大块:nameserver集群、producer集群、consumer集群、broker集群

NameServer是一个路由的角色,生产消费者会通过nameserver查找topic相应的borker ip列表进行发送消费消息

broker是一个消息中转角色,负责存储消息,转发消息。定期向nameserver发送心跳包,轮询注册元数据(borker的ip端口、broder集群、topic地址等信息)

producer负责生产消息,将消息发送到broker服务器。可以是同步、异步、顺序、单向发送。同步和异步需要broker返回确认

consumer负责消费消息,从broker服务器拉取消息。可以是拉取式消费和推动式消费

五、rocketmq有哪几种部署模式?优缺点是什么?

1、单master

只有一个broker,如果broker挂了就会导致mq不可用

2、多master

集群模式,如果其中一个master挂了不影响mq继续提供服务,性能也最高,但如果master挂了必须要等恢复后才能继续消费消息

3、多master多slave 异步复制

集群模式,主要是弥补了多master集群下没有slave,master挂了不能继续订阅的问题,优点是低延迟高吞吐,缺点就是Master宕机,磁盘损坏的情况会导致消息丢失

4、多master多slave 同步双写

集群模式,和多master多slave模式你一样,唯一不同的是只有master和slave都写成功后,才向客户端返回成功,优点当master宕机后消息无延迟,服务高可用和数据可用性非常高,缺点就是降低消息写入效率,影响系统吞吐量

六、rocketmq的工作流程是怎样的?

1、启动namesever

2、启动broker

3、创建topic

4、producer发送消息

5、consumer消费消息

七、RocketMq有哪些方式消费消息?

1、rocketmq提供两种方式,pull和push

2、push本质还是使用pull方式实现,通过consumer轮询从broker拉取消息,只不过在push方式里,consumer把轮询过程封装了一层,并注册了messageListener监听器。当轮询获取消息后就会通知messageListener的consumerMessage()来消费。

八、RocketMq如何实现负载均衡?

1、producer生产者端负载均衡是默认轮询向topic的所有queue发送消息,来达到消息平均落到不同队列上

2、consumer消费者负载均衡则是假设5个队列,2个消费者,则第一个消费者消费3个队列,第二个则消费2个队列,以达到平均消费的效果。但要注意的是,当consumer数量大于队列的数量时,多余的consumer不会去消费队列,会浪费资源,建议配置等于小于队列的consumer消费者,避免浪费

九、RocketMq的存储机制是怎么实现的?

采用文件的方式存储,在写消息和发送消息使用顺序写和零拷贝模式,保证了rocketmq高性能

顺序写:直接追加数据到末尾

零拷贝:读取文件,再用socket发送出去

十、RocketMq的存储结构是怎样的?

1、使用commitlog来存储消息,并分别提供了consumerQueue和indexFile两个索引,来快速检索消息

十一、RocketMq如何进行消息去重?

1、消费端业务处理保持幂等性

2、建立日志表,使用消息主键作为表主键,处理消息前先insert

十二、怎么解决消息丢失问题?

1、生产者采用事务消息机制

发生half消息到mq

mq回复half消息

执行本地事务下单

通知mq本地事务状态

mq未确定事务状态进行回查

检查本地事务状态

返回mq本地事务检查状态

2、Broker配置同步刷盘+Dledger主从架构

配置mq队列flushDiskType同步刷盘

Dledger文件同步,通过二阶段提交来保证主从同步,Leader收到数据后标记为uncommit,在发送数据到Follower,Follower收到数据后回复ack,当大部分Follower回复ack后Leader会标记为commit,最后发送标记commit到Follower完成两阶段数据同步

3、消费者不要使用异步消费

4、整个mq挂了使用降级方案

临时写入redis或文件

开启定时任务扫描redis

尝试推送数据到mq,直到mq恢复正常

十三、怎么保证MQ消息顺序消费?

1、mq分为局部有序和全局有序

2、发送者发送消息时会通过messageQueue轮询方式尽量均匀的发送到不同消息队列

3、局部有序:通过在发送消息时指定MessageSelector对象,把有序的一组消息发送到同一个队列,利用messageQueue天生的FIFO先进先出来保证顺序消费

4、全局有序:将topic配置成一个messageQueue队列(默认4个)来保证全局有序

十四、怎么快速处理mq积压的消息?

生产消费者配置不平衡、消费者挂了、网络波动等场景出现消息积压情况

1、增加Consumer节点个数

2、创建一个新的Topic,负责消费旧Topic中的消息

3、官网特殊情况,从普通主从架构模式切换到Dledger高可用集群时避免消息丢失需要先消费完消息,因为Dledger集群会接管原mq集群commitlog日志,所以这种场景也需要尽快处理积压消息

十五、怎么配置mq消息轨迹?

broker.conf设置traceTopicEnable=true

参考:

RocketMQ 常见面试问题_柚子茶1990的博客-CSDN博客_rocketmq面试

RocketMQ常见面试题_ayu_programer的博客-CSDN博客_rocketmq面试

RocketMQ在面试中那些常见问题及答案+汇总-阿里云开发者社区

纯JS实现SM3加密算法(兼容IE浏览器) 纯JS实现SM3加密,IE、谷歌、火狐等浏览器可以直接使用。 阅读详情

相关推荐

java高级工程师BAT面试

1)Spring Boot中的Starter 答:Starter组件是SpringBoot中四大核心功能特性之一,除此之外Spring Boot里面还有自动装配,以及Actuator监控等这样一些特性。SpringBoot都是为了让开发者在开发基于Spring生态下的企业级应用的时候,只需要关注业务逻辑,减少对配置和外部环境的依赖。其中Starter组件作用有几个,第一是以功能为维度,来维护对应jar包的版本依赖的,那么开发者就不需要关心这些2)如何区分Spring事务和分布式事务的使用以及两个事务之间的关

ZhiguoXue_IT的博客 171

RocketMQ】MQ与RocketMQ介绍

本文介绍了消息队列(MQ)的基本概念及其在分布式系统中的作用,包括实现异步通信、削峰限流和应用解耦等方面的优势,并对ActiveMQ、RabbitMQ、RocketMQ及Kafka四种MQ产品进行了对比分析,涵盖了它们的开发语言、吞吐量、时效性和可用性等特点。此外,文章还特别介绍了RocketMQ,包括其架构设计、高可用性实现方式以及消费模式等内容,突出了RocketMQ在消息顺序消费、拉取模式、扩展性等方面的优势。

我只管埋头前行,剩下的交给时间。 1537

Java面试宝典:从基础到架构20

系统设计六步法: 需求分析→容量估算→架构设计→数据模型→技术选型→深入设计短链系统: 自增ID + Base62,Redis缓存秒杀系统: 限流→预减库存→异步下单→乐观锁防超卖Feed流: 推模式/拉模式/推拉结合分布式锁: 数据库/Redis/ZooKeeper抢红包: 二倍均值法,Redis List原子弹出延时任务: Redis ZSet/RocketMQ延迟消息IM系统: 长连接 + ACK + 消息存储。

_abab的专栏 84

RocketMQ消费者是如何获取消息的?转疯了!

第1章:Dubbo的简史、后续的规划和整体架构大图 ————Dubbo高性能RPC通信框架 1.1应用架构演进过程 1.2 Dubbo 简介 1.3 Dubbo总体大图 第2章:Dubbo的环境配置和基于Dubbo开发第一款应用程序 ————开发第一款Dubbo 应用程序 2.1配置开发环境 2.2基于XML配置实现 2.3基于注解实现 2.4基于API实现 2.5构建并运行 第3章:Dubbo内置的常用注册中心的实现原理 ————Dubbo注册中心 3.1注册中心概述 3.2订阅/发布

m0_57081140的博客 321

java mq如何获取结果_深入研究RocketMQ消费者是如何获取消息的

前言小伙伴们,国庆都过的开心吗?国庆后的第一个工作日是不是很多小伙伴还沉浸在假期的心情中,没有工作状态呢?那王子今天和大家聊一聊RocketMQ的消费者是如何获取消息的,通过学习知识来找回状态吧。废话不多说,我们开始吧。消费者组首先我们了解一个概念,什么是消费者组。消费者组你就可以把它理解为,给一组消费者起一个名字。假设我们有一个订单Topic名字是OrderTopic,然后库存系统和积分系统都要...

weixin_32280985的博客 1342

active mq topic消费后删除_手把手教你用redis实现一个简单的mq消息队列

众所周知,消息队列是应用系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有 ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ.但是如果你不想为你的系统引入一个重量级(相对 redis 来说)的 mq,但是想要享受解耦、异步消息等特性,通过本文你就 get 到了,通过 redi...

weixin_39984982的博客 389

面试现场模拟题 要站起来,RocketMQ 5,java高级工程师面试宝典

其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来目录:部分内容截图:一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

2401_83977554的博客 898

Java面试实录:Kafka与RocketMQ技术栈深度解析

面试官对候选人的表现非常满意,称赞其技术深度和实际经验丰富,能够灵活应对各种业务场景。本次面试通过多轮渐进式提问,深入探讨了Kafka和RocketMQ的核心技术点及其在实际业务中的应用。候选人的表现展现了其深厚的技术功底和丰富的实战经验,是一场高质量的面试

南客先生的博客 521

Java技术专家成长路线总结(思维导图)

最近很多读者朋友问慕枫如何能够进行Java入门学习以及构建自己的技术体系,总感觉Java技术知识浩如烟海,网上资料又多如牛毛,根本不知道应该从哪里入手进行学习,另外觉得自己学习的内容零零碎碎不成体系,感觉十分的迷茫。为了解答大家的疑惑,慕枫特意梳理了Java小白到技术专家成长过程中必备的技术体系(这次可是拿出来压箱底的技术总结思维导图)。希望这份技术成长路线总结可以对大家在学习Java的过程中有所帮助,在学习上可以做到有的放矢。

3880

60题Java高级工程师面试高频题:JVM+Redis+并发+算法+框架含答案!

60题Java高级工程师面试高频题:JVM+Redis+并发+算法+框架含答案! 面试,也是一种学习方式面试,不仅仅是面试,还是一次对自己技术知识栈的梳理、考核、复盘。 如果你参加了很多公司的面试,但却都没有拿到offer,又或者拿到offer的概率特别低,原因很简单,你可能在技术知识点上有漏洞。 经过一轮认真复习之后,你会发现自己的技术知识栈越来越充实,这时候再去挑战好offer,成功概率无疑会增大很多。当有机会参与心仪公司或BAT大厂面试时,你至少能够游刃有余回答大部分问题~ 分享一个,有很多干货,包含

a646705816的博客 5117

Java面试实录:分布式缓存与消息队列技术栈深度解析

本次面试通过多轮渐进式提问,深入探讨了分布式缓存和消息队列的核心技术点及其在实际业务中的应用。候选人的表现展现了其深厚的技术功底和丰富的实战经验,面试官对候选人的表现非常满意,称赞其技术深度和实际经验丰富,能够灵活应对各种业务场景。

南客先生的博客 428

牛客网Java面试题汇总(2026秋招最新版,附答案·持续更新)

前三者 LZ 将淋漓尽致地挥毫于这篇文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。现在大厂内卷现象泛滥,而且 996 的传统依旧肆虐。但没有哪位程序员能架得住互联网大厂的高薪职位诱惑。特别是我还有一位在阿里工作 7 年多的老表,在其耳旁风之下,不断将大厂描绘的美丽风景刻画在我脑海中,也让我一直有着想进大厂镀金的梦想。

sjkflw121150的博客 220

2026 Java 中高级面试题全集(100 题附详细答案)

`@SpringBootApplication` 包含 `@EnableAutoConfiguration`,通过 `AutoConfigurationImportSelector` 读取 `META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`(Spring Boot 3.0 后替代 `spring.factories`)加载配置类。若冲突,遍历链表/树,`equals` 判断覆盖,否则插入;

weixin_63835553的博客 365

RocketMq事务回查

RocketMq事务回查 问题 rocketmq发送事务消息后,如果事务没有返回实际结果COMMIT/ROLLBACK,就会触发到消息回查,消息回查的时间是多少呢?消息回查是怎么做的呢? 开搞 部署个本地rocketmq: 略 新建个springboot项目:略 根据官网加依赖,随便改改代码如下: package com.example.study; import org.apache.rocketmq.client.producer.LocalTransactionState; import

漂泊的程序猿 2567

RocketMQ-事务消息

问题引入 假设一个场景如下,工行用户A向建行用户B转账1万元,我们可以简单使用同步消息来处理需求,流程如下! 工行系统发生一个给B加钱的同步消息M给Broker 消息被Broker成功连接后,向工行系统发送成功ACK 工行系统收到成功ACK后从用户A中扣款 建行系统从Broker中获取到消息M 建行系统消费消息M,即向用户B加钱 这种模型其实存在很大问题,如第三步从用户A中扣款失败,或者第五步给用户A加钱失败,这个对于业务来说都是毁灭性的。 解决思虑 解决思路是将第1、2、3不具有原则性,要么全部成功

程序员劝退师的博客 2253

RocketMQ之应用

当一条消息初次消费失败,消息队列会自动进行消费重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息,此时,消息队列不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。这个队列就是死信队列(Dead-Letter Queue,DLQ),而其中的消息 则称为死信消息(Dead-Letter Message,DLM)。死信队列是用于处理无法被正常消费的消息的。

weixin_51089557的博客 1373

RocketMQ面试题及答案

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

housen516210的博客 2025

Java面试RocketMQ

云消息队列 RocketMQ 版中用于产生消息的运行实体,一般集成于业务调用链路的上游。生产者是轻量级匿名无身份的。

lxf_master的博客 1293

面试题篇-09-RocketMQ相关面试

零拷贝页缓存(PageCache)RocketMQ 采用顺序读写,期间借助 mmap,和页缓存 达到快的原因;页缓存的不确定性和 mmap 惰性加载(访问时缺页中断才会真正加载数据),用了文件预先分配和文件预热即每页写入一个0字节,然后再调用mlock 和 madvise(MADV_WILLNEED)

Alan0517 2715

Qt界面美化-飞扬青云自绘控件插件的使用-避免采坑

1、先上一个集成到QtCreater中的效果图: 2、飞扬青云自绘控件插件下载地址:https://gitcode.net/mirrors/feiyangqingyun/qucsdk?utm_source=csdn_github_accelerator 3、集成插件到QtCreater中的方法: (1)、查看自己使用的QtCreater的版本信息,我的:Qt 5.15.2 MSVC2019 64位 (2)插件下载下来后工程预览: 我选择msvc版本的SDK,打开找到匹配的SDK:...

小米的修行之路 2744

dell T430 raid驱动

dell T430 raid驱动,如果戴尔服务器识别不到sata普通硬盘,需要打这个驱动,使用方法请网上搜

上一篇: 面试Java高级工程师之应用框架总结
下一篇: 面试Java高级工程师之Redis总结
Code Space
博客等级 码龄14年 8粉丝 19原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值