2022年RocketMQ面试题及答案
1.、消息队列有哪些使用场景
异步
解耦
流量削峰
2、为什么使用rocketMQ
性能: TPS 10000没问题
顺序消费: 可以保证一个队列里面的消息顺序消费,比如同一个订单的消息可以放到同一个队列这样就达到了顺序消费,如果想 保证全局顺序,设置一个队列
事务消息: 添加事务表,实现TransactionListener,在本地事务提交的时候往事务表插入一条数据,mq回查消息,如果存在就commit,不存在就rollBack,回查次数自己设置
思想:利用两阶段提交+补偿机制
3、消息队列有哪些消息模型
队列模型: 一条消息被一个消费组下面的一个消费者消费 对应集群消费
发布/订阅模型:一条消息被消费组下面的所有消费者消费 对应广播消费
4、如何处理消息的重复问题
业务幂等: 保证业务消费一条和消费多条是幂等的
消息去重:为每条消息创建一个唯一的key,不能重复消费,比如设置唯一索引,将消息插入数据库做判断
5、怎么处理消息积压
消费者扩容:如果队列的个数大于消费者的个数,可以对消费者进行扩容,提高消费能力
迁移消息到临时topic:如果队列的个数小于消费者的个数,增加消费者也不会提高消费能力,新建一个临时的topic,用几个消费者直接将消息丢到临时的topic,然后创建几个消费者去消费临时的topic,这样也是间接的加大消费能力
6、怎么保证消息顺序
部分消息顺序:将消息都发送到同一个队列
全局消息顺序:配置topic为1个队列
7、如何实现消息过滤
tag过滤
sql表达式过滤
filter server自定义函数过滤
8、RocketMQ怎么实现延时消息的
发送消息的时候设置延迟级别,broker收到延时消息的时候会先将消息发送到SCHEDULE_JOB_XXX的相应时间段的队列中,然后通过一个定时任务轮询这些队列,如果达到时间了就将消息发送到目标topic的队列,然后消费者就可以正常消费消息
9、事务消息怎么实现?
- 1、Producer 向 broker 发送半消息
- 2、Producer 端收到响应,消息发送成功,此时消息是半消息,标记为 “不可投递” 状态,Consumer 消费不了。
- 3、Producer 端执行本地事务。
- 4、正常情况本地事务执行完成,Producer 向 Broker 发送 Commit/Rollback,如果是 Commit,Broker 端将半消息标记为正常消息,Consumer 可以消费,如果是 Rollback,Broker 丢弃此消息。
- 5、异常情况,Broker 端迟迟等不到二次确认。在一定时间后,会查询所有的半消息,然后到 Producer 端查询半消息的执行情况。
- 6、Producer 端查询本地事务的状态
- 7、根据事务的状态提交 commit/rollback 到 broker 端。(5,6,7 是消息回查)
- 8、消费者段消费到消息之后,执行本地事务,执行本地事务。
10、死信队列了解吗?
消息消费失败之后,会自动进行消息重试,如果达到了重试的次数仍然消费失败,会将该消息发送到死信队列,死信队列的消息不会被消费者正常消费,有效期为3天,3天之后自动删除,一个死信队列对应一个group id,控制台支持对死信消息的查询、重发、导出
11、如何保证RocketMQ的高可用
首先broker是集群部署,每一个master下面挂一个slave
读的高可用:如果master挂了,消费者还可以从slave读取消息
写的高可用:由broker集群保证,单个节点出现问题不影响发送消息到broker,如果master挂了,可以修改slave的配置文件为master,然后启动承载写的功能
12、RocketMQ为什么不采用zookeeper做注册中心?
基于可用性来考虑,zookeeper满足的是CP
基于性能来考虑,nameserver本身的实现是很轻量级,可以通过增加机器的方式水平扩展,提升集群的抗压能力
消息发送应该弱依赖于nameserver,当生产者第一次发送消息,从nameserver获取到broker地址然后缓存到本地,所以nameserver集群挂了之后也不会影响生产者发送消息
13、Broker是怎么保存数据的呢?
commitlog文件: 消息的主体内容
ConsumeQueue文件:基于topic的commitLog索引文件
IndexFile:提供根据消息key或者时间区间查询消息
利用的操作系统高效读写的方式:PageCache 、 顺序读写、零拷贝
14、消息刷盘怎么实现的?
同步刷盘:消息到达Broker内存之后将消息刷盘到commitLog中并返回生产者发送成功
异步刷盘:消息到达Broker内存之后返回生产者发送成功,并唤醒后台线程将数据刷盘到commitLog日志文件中,只是唤醒,不确定线程执行的时机
刷盘的最终实现是调用NIO的MappedByteBuffer.force() 将数据刷新到磁盘
15、RocketMQ的负载均衡是如何实现的?
生产者端的负载均衡:索引递增取模 ,如果sendLatencyFaultEnable
为true(默认为false),将会规避上次发送失败的broker
消费者端的负载均衡:
16、RocketMQ消息长轮询?
Consumer拉取消息,如果队列里面没有消息不会立即返回,而是维持一个PullRequest,另外有一个线程会不断的检查队列是否有消息,如果有则返回,如果到了阻塞的时间还没有消息则返回
2022年RocketMQ面试题及答案相关推荐
- 2022氟化工艺考试试题及答案
题库来源:安全生产模拟考试一点通公众号小程序 2022氟化工艺上岗证题目为氟化工艺考试题库考前押题密卷!2022氟化工艺考试试题及答案根据氟化工艺新版教材大纲编写.氟化工艺考试模拟题随时根据安全生产模 ...
- 2022年电力电缆培训试题及答案
题库来源:安全生产模拟考试一点通公众号小程序 2022年电力电缆模拟考试题库是电力电缆试卷考前押题密卷!2022年电力电缆培训试题及答案根据电力电缆最新教材汇编.电力电缆复审模拟考试通过安全生产模拟考 ...
- RocketMQ面试题及答案
RocketMQ面试题及答案 1. RocketMQ是什么? RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 A ...
- 2022流动式起重机司机试题及答案
题库来源:安全生产模拟考试一点通公众号小程序 2022流动式起重机司机上岗证题目系流动式起重机司机考试题目上机考试练习题!2022流动式起重机司机试题及答案依据流动式起重机司机新版教材大纲编写.流动式 ...
- 2022最新自动化测试面试题及答案
自动化测试是什么?自动化测试学什么?自动化测试面试题及答案?–看完后吊打面试官! 一.前言 最近有童鞋和我抱怨,说网上很难搜到那些全面又合适的自动化测试面试题,这里根据我个人的经验以及收集整理的: 你 ...
- 2022最新Redis面试题含答案
1.什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存. ...
- 2022年PHP面试题附答案(实战经验)
1.什么事面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2.SESSION 与 COOKIE的区别是什么,请从协议 ...
- 2022最新dubbo面试题含答案
1.Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目. 2.为什么要用Dubbo? 因为是阿里开源项目,国内很多互 ...
- 2022最新软件测试面试题附答案
以下面试题为个人在面试过程中所遇到的,仅供参考!如有错误,望指出. 1.软件测试方法有哪些分类?各有什么特点? 1)白盒.黑盒.灰盒 2)单元测试.集成测试.系统测试.验收测试.回归测试.Alpha ...
最新文章
- 调用系统中的默认EMAIL程序
- OpenCV学习笔记(3)——Scalar数据类型理解
- Linux内核源码分析方法
- 基于属性加密的ABE算法的应用场景思考展望
- iOS开发:icon和启动图尺寸(转)
- 如何在SQL Server中创建视图
- 盘点一下数据库的误操作都有哪些后悔药?
- 递归统计项目中的非空白代码行数
- 什么软件和设备可以修改芯片代码_黑客宣称可以越狱苹果T2安全芯片
- 税务计算机 试题分析,税务师考试方式、题型、计算器使用规定
- 解决关闭xftp,总是跳出无法访问网络位置,请输入xftp 6.msi
- 如何使用图片自定义和装饰您的QR码
- Centos7 出现xxx不在sudoers文件中的解决方案
- pom.xml中解决Provides transitive vulnerable dependency maven:org.yaml:snakeyaml:1.33警告
- See-SQL审计平台介绍及部署
- 超声波测距仪编程_51单片机控制的超声波测距仪程序
- android unity页面关闭报错,Unity3d报错解决方案
- UVM TLM2.0简单介绍
- 看图工具IrfanView
- artifical reality
热门文章
- matlab_颜色矩阵三原色
- 学习大数据开发要掌握哪些技术呢?
- 教培行业正在开启新纪元
- 初步接触houdini---零零散散
- MAC virtual box“不能为虚拟机启动一个新任务”问题解决方法
- Reactor3 Flux.create与Flux.push正确打开方式
- 红米note4 android o,小米红米Note4/mido-LOS-安卓9.0.0-稳定版Stable2.0-来去电归属-农历等-本地化增强适配...
- 聚科技精英,享开源之美- 2019 Open Source Summit 主题演讲+项目亮点
- 纯前端JS实现一个登记照改换底色背景色功能
- uma是什么意思_UMA是什么意思?