面试Java高级工程师之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在面试中那些常见问题及答案+汇总-阿里云开发者社区

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值