常用消息中间件对比

本文正在参与【[ 一起秋招吧 ] 】 征文活动,一起来聊聊校招的那些事吧,牛客周边和百元京东卡等你来领~

大家好,我是小羽,专注于后端开发相关知识的分享。今天将给大家带来的是关于后端面试关于常用消息中间件的对比介绍。

消息队列的优缺点,使用场景

优点:
1、解耦,降低系统之间的依赖
2、异步处理,不需要同步等待
3、削峰填谷,将流量从高峰期引到低谷期进行处理
缺点:
1、增加了系统的复杂度,幂等、重复消费、消息丢失等问题的带入
2、系统可用性降低,mq的故障会影响系统可用
3、一致性,消费端可能失败
场景:日志采集、发布订阅等

如何保证消息不被重复消费

幂等:一个数据或者一个请求,重复来多次,确保对应的数据是不会改变的,不能出错。
思路:

  • 如果是写 redis,就没问题,反正每次都是 set ,天然幂等性
  • 生产者发送消息的时候带上一个全局唯一的id,消费者拿到消息后,先根据这个id去 redis里查一
    下,之前有没消费过,没有消费过就处理,并且写入这个 id 到 redis,如果消费过了,则不处理。
  • 基于数据库的唯一键

    Kafka、ActiveMQ、RabbitMQ、RocketMQ 对比

    ActiveMQ:JMS规范,支持事务、支持XA协议,没有生产大规模支撑场景、官方维护越来越少
    RabbitMQ:erlang语言开发、性能好、高并发,支持多种语言,社区、文档方面有优势,erlang语言
    不利于java程序员二次开发,依赖开源社区的维护和升级,需要学习AMQP协议、学习成本相对较高
    以上吞吐量单机都在万级
    kafka:高性能,高可用,生产环境有大规模使用场景,单机容量有限(超过64个分区响应明显变
    长)、社区更新慢
    吞吐量单机百万
    rocketmq:java实现,方便二次开发、设计参考了kafka,高可用、高可靠,社区活跃度一般、支持语
    言较少
    吞吐量单机十万
#秋招##面前三分钟##面试八股文##面霸的自我修养##2023一起秋招吧#
全部评论
每天一点新知识,多谢大神
点赞 回复 分享
发布于 2022-08-29 11:12 江苏

相关推荐

头像
05-24 15:08
门头沟学院 Java
面试官很厉害,全程没有问我项目,就问八股。我很菜,八股没办法延申太多,答的都快红温了,感觉要寄,但是最后面试官说我体系搭的还行,心里还是有点小开心。----------------------------1.平时用的开发工具是什么?(不太懂问这个干啥)答:IDEA。(感觉可能想问我一下有没有用过cursor,但是本人确实没怎么用过,hh)2.MAVEN中<dependencies>和<dependencyManagement>有什么区别?3.LinkedList底层数据结构是什么?4.ArrayList和LinkedList都可以用get加一个数字来获取里面的一个元素的对吧?5.ArrayList和LinkedList都有10000个元素,它们都是用get(9999)获取元素,性能上有什么差别吗?6.如果对于存储了10000元素的LinkedList用get(9999)的话,时间复杂度是多少?7.平时开发的时候有没有遇到过OOM问题?8.JVM是如何判断一个对象能否被释放的?9.Object有哪些私有的方法?10.Object有哪些常见的方法?11.一个对象强转为String和使用String.valueOf有什么区别吗?12.String的String.valueOf的重载有多少个?实际上面试官应该是想问我重载的分类13. 有用过事务吗?你的事务用在什么地方,是为了解决什么问题呢?14. 一个方法里有多个读写操作,一开始没加事务注解,加了后性能有什么变化吗?(牛友们有更好的回答吗?我目前只想到这个,但是不太清除会出现在什么业务场景)答:有可能更快,有可能更慢。更快的情况是数据竞争不激烈,那么加了事务注解的方法只需一次网络IO,而不加事务的要多次网络IO。更慢的情况下是数据竞争激烈时,如果有很多事务提前抢占一些资源,导致加锁后其他的事务无法获取,等待的事务比较多,就会有可能会更慢。相比之下,一次一次提交的方法每次抢占的资源比较少,反而等待的事务比较少,可能更快。15. 现在有1w个员工,请你按照他们的年龄给他们排序,我们不关注他们原先的顺序,只要是按年龄顺序排序即可。创建一个大小为100的ArrayList<ArrayList<Employee>>,然后对应年龄的员工插入即可,最后遍历。时间复杂度应该是O(n)的。
查看14道真题和解析
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务