消息队列面试相关

消息队列面试相关

1)为什么使用消息队列啊?

其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么

面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用MQ可能会很麻烦,但是你现在用了MQ之后带给了你很多的好处

先说一下消息队列的常见使用场景吧,其实场景有很多,但是比较核心的有3个:解耦、异步、削峰

解耦:现场画个图来说明一下,

A系统发送个数据到BCD三个系统,接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负责人濒临崩溃中。。。再来点更加崩溃的事儿,A系统要时时刻刻考虑BCDE四个系统如果挂了咋办?我要不要重发?我要不要把消息存起来?头发都白了啊。。。


面试技巧:你需要去考虑一下你负责的系统中是否有类似的场景,就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用MQ给他异步化解耦,也是可以的,你就需要去考虑在你的项目里,是不是可以运用这个MQ去进行系统的解耦。在简历中体现出来这块东西,用MQ作解耦。

异步:现场画个图来说明一下,


A 系统接收一个请求,需要在自己本地写库,还需要在 BCD 三个系统写库,自己本地写库要 3ms BCD 三个系统分别写库要 300ms 450ms 200ms 。最终请求总延时是 3 + 300 + 450 + 200 = 953ms ,接近 1s ,用户感觉搞个什么东西,慢死了慢死了。

削峰:每天0点到11点,A系统风平浪静,每秒并发请求数量就100个。结果每次一到11~1点,每秒并发请求数量突然会暴增到1万条。但是系统最大的处理能力就只能是每秒钟处理1000个请求啊。。。尴尬了,系统会死。。。



2消息队列有什么优点和缺点啊?

 

优点上面已经说了,就是在特殊场景下有其对应的好处,解耦、异步、削峰

 

缺点呢?显而易见的

 

系统可用性降低:系统引入的外部依赖越多,越容易挂掉,本来你就是A系统调用BCD三个系统的接口就好了,人ABCD四个系统好好的,没啥问题,你偏加个MQ进来,万一MQ挂了咋整?MQ挂了,整套系统崩溃了,你不就完了么。

 

系统复杂性提高:硬生生加个MQ进来,你怎么保证消息没有重复消费?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?头大头大,问题一大堆,痛苦不已

 

一致性问题A系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是BCD三个系统那里,BD两个系统写库成功了,结果C系统写库失败了,咋整?你这数据就不一致了。

 

所以消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种额外的技术方案和架构来规避掉,最好之后,你会发现,妈呀,系统复杂度提升了一个数量级,也许是复杂了10倍。但是关键时刻,用,还是得用的。。。

 

3kafkaactivemqrabbitmqrocketmq都有什么优点和缺点啊?

常见的MQ其实就这几种,别的还有很多其他MQ,但是比较冷门的,那么就别多说了

作为一个码农,你起码得知道各种mq的优点和缺点吧,咱们来画个表格看看

特性

ActiveMQ

RabbitMQ

RocketMQ

Kafka

单机吞吐量

万级,吞吐量比RocketMQKafka要低了一个数量级

万级,吞吐量比RocketMQKafka要低了一个数量级

10万级,RocketMQ也是可以支撑高吞吐的一种MQ

10万级别,这是kafka最大的优点,就是吞吐量高。

 

一般配合大数据类的系统来进行实时数据计算、日志采集等场景

topic数量对吞吐量的影响

 

 

topic可以达到几百,几千个的级别,吞吐量会有较小幅度的下降

 

这是RocketMQ的一大优势,在同等机器下,可以支撑大量的topic

topic从几十个到几百个的时候,吞吐量会大幅度下降

 

所以在同等机器下,kafka尽量保证topic数量不要过多。如果要支撑大规模topic,需要增加更多的机器资源

时效性

ms

微秒级,这是rabbitmq的一大特点,延迟是最低的

ms

延迟在ms级以内

可用性

高,基于主从架构实现高可用性

高,基于主从架构实现高可用性

非常高,分布式架构

非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用

消息可靠性

有较低的概率丢失数据

 

经过参数优化配置,可以做到0丢失

经过参数优化配置,消息可以做到0丢失

功能支持

MQ领域的功能极其完备

基于erlang开发,所以并发能力很强,性能极其好,延时很低

MQ功能较为完善,还是分布式的,扩展性好

功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用,是事实上的标准

优劣势总结

非常成熟,功能强大,在业内大量的公司以及项目中都有应用

 

偶尔会有较低概率丢失消息

 

而且现在社区以及国内应用都越来越少,官方社区现在对ActiveMQ 5.x维护越来越少,几个月才发布一个版本

 

而且确实主要是基于解耦和异步来用的,较少在大规模吞吐的场景中使用

 

erlang语言开发,性能极其好,延时很低;

 

吞吐量到万级,MQ功能比较完备

 

而且开源提供的管理界面非常棒,用起来很好用

 

社区相对比较活跃,几乎每个月都发布几个版本分

 

在国内一些互联网公司近几年用rabbitmq也比较多一些

 

但是问题也是显而易见的,RabbitMQ确实吞吐量会低一些,这是因为他做的实现机制比较重。

 

而且erlang开发,国内有几个公司有实力做erlang源码级别的研究和定制?如果说你没这个实力的话,确实偶尔会有一些问题,你很难去看懂源码,你公司对这个东西的掌控很弱,基本职能依赖于开源社区的快速维护和修复bug

 

而且rabbitmq集群动态扩展会很麻烦,不过这个我觉得还好。其实主要是erlang语言本身带来的问题。很难读源码,很难定制和掌控。

接口简单易用,而且毕竟在阿里大规模应用过,有阿里品牌保障

 

日处理消息上百亿之多,可以做到大规模吞吐,性能也非常好,分布式扩展也很方便,社区维护还可以,可靠性和可用性都是ok的,还可以支撑大规模的topic数量,支持复杂MQ业务场景

 

而且一个很大的优势在于,阿里出品都是java系的,我们可以自己阅读源码,定制自己公司的MQ,可以掌控

 

社区活跃度相对较为一般,不过也还可以,文档相对来说简单一些,然后接口这块不是按照标准JMS规范走的有些系统要迁移需要修改大量代码

 

还有就是阿里出台的技术,你得做好这个技术万一被抛弃,社区黄掉的风险,那如果你们公司有技术实力我觉得用RocketMQ挺好的

kafka的特点其实很明显,就是仅仅提供较少的核心功能,但是提供超高的吞吐量,ms级的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展

 

同时kafka最好是支撑较少的topic数量即可,保证其超高吞吐量

 

而且kafka唯一的一点劣势是有可能消息重复消费,那么对数据准确性会造成极其轻微的影响,在大数据领域中以及日志采集中,这点轻微影响可以忽略

 

这个特性天然适合大数据实时计算以及日志收集


综上所述,各种对比之后,我个人倾向于是:

一般的业务系统要引入MQ,最早大家都用ActiveMQ,但是现在确实大家用的不多了,没经过大规模吞吐量场景的验证,社区也不是很活跃,所以大家还是算了吧,我个人不推荐用这个了;

后来大家开始用RabbitMQ,但是确实erlang语言阻止了大量的java工程师去深入研究和掌控他,对公司而言,几乎处于不可控的状态,但是确实人是开源的,比较稳定的支持,活跃度也高;

不过现在确实越来越多的公司,会去用RocketMQ,确实很不错,但是我提醒一下自己想好社区万一突然黄掉的风险,对自己公司技术实力有绝对自信的,我推荐用RocketMQ,否则回去老老实实用RabbitMQ吧,人是活跃开源社区,绝对不会黄

所以中小型公司,技术实力较为一般,技术挑战不是特别高,用RabbitMQ是不错的选择;大型公司,基础架构研发实力较强,用RocketMQ是很好的选择

如果是大数据领域的实时计算、日志采集等场景,用Kafka是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规范

 

 

阅读更多


	
  • 上一页
  • 1
  • 下一页

高并发面试必问:分布式消息系统Kafka简介

08-26 3.4万

Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。... 来自: 内方外圆

		




		

http://blog.csdn.net/oMaverick1/article…

来自: jasonhui512的博客




			
			


		

实现高性能,高可用,可伸缩和最终一致性架构

使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ…

来自: mark’s technic world



		




		

 ☞ 以下介绍消息队列在实际应用常用的使用场景。异步处理、应用解耦、流量削锋和消息通讯四个场景。 1)、异步处理:场景说明:用户注册后,需要发注册邮件和注册短信。
     …

来自: zhengzhaoxiang的博客



		

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

AMQP的主要特征…

来自: Lunaqi的博客



		

大盘或将崛起,千万别在这时候把股票卖掉,否则后悔! 虎玩游艺 · 燨燚
		


		


		



      
林锐波
林锐波

关注 36篇文章

奔跑的大马哈鱼
奔跑的大马哈鱼

关注 31篇文章

the_flying_pig
the_flying_pig

关注 37篇文章

肖申克de九叔
肖申克de九叔

关注 107篇文章

Kafka相关问题,请参照!!!

来自: Er浩的大数据行走论



		

不停抽插,就是不想射有多爽! 老中医说:多吃他就可以做到! 通聚商贸 · 燨燚
		




		




		

#rabbitmq
spring.rabbitmq.host=127.0.0.1 主机
spring.rabbitmq.port=5672 端口
spring.rabbitm…

来自: weixin_38035852的博客



		

二、分布式基础知识

软件架构设计的六大原则:htt...
					
                    						来自:	 gangsijay888的博客
                    					

一个退役操盘手肺腑之言,写给无数正在亏钱的散户~ 集升 · 燨燚
		

第一轮:电话初面

第二轮:技术面谈【技术职位尽量避免多谈管理上的工作】

第三轮:高管复试

第四轮:HR最后确认

一面:首先确认对阿里的意向度(如果异地更会考虑对工作地点(杭州)的意向度!阿…

来自: Jav陈序原



		

(2) 支持丰富数据类型,支持string,li…

来自: yajlv的专栏



			




		

http://199c1df7.m.daocloud.io

学习消息队列时,…

来自: The_flying_pig的博客



		

1.msgget
作用:创建消息队列
原型:int msgget(key_t key, int msgflag)
参数:key:键值 IPC_PRIVATE
           …

来自: 学习ing…



克拉玛依股王8年追股市技巧“1272”战法曝光,震惊众人 东正金融 · 燨燚
		

        并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一…

来自: 林元煌



		

声明,本人能力有限,只是列出来参考,不对之处欢迎指正。

JAVA基础

JAVA中的几种基本类型,各占用多少字节?

下图单位是bit,非字节 1B=8…

来自: 前往JAVA架构的路上



		




		




		

男人行房时间短?老中医说:多吃它。时间延长40分钟 万源鑫裕 · 燨燚
		

    1.当向本线程所建立的窗口SendMessage消息时,它只是调用窗口的消息处理过程。如下图…

来自: isilent



		

1、你能简单描述一下HBase吗?能画出它的架构图吗?HBase是一个面向列的 N…

来自: 神奕的专栏



		

执行情况:

知识总结:
冒泡排序法:也叫升序排序法,但是相比起二分法查找只能应用于有序数列,二如何将一个无序数列变的有序就可以使用冒泡排序法!!!

对上面的过程进行总结:



来自: Geek宝宝的努力!



		




		

1、Activity生命周期说下,出现异常主要在那个阶段处理?
2、数据存储有哪几种方式?说过你用过哪些,做了哪些相关的项目?Sqlite用过说下?
3、A…

来自: shenghua



消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。

目前在…

来自: zzjstudent的专栏



			




		

目录
├─01_先来看一个互联网java工程师的招聘JD.zip" w; s( v: t0 v+ a# l7 W2 `1 a├─02_互联网Java…

来自: promote1234的博客



		

win32应用程序包含windows窗口程序和控制台程序2种.
窗体程序内置模板代码,控制台程序适合编写dos程序
2.      创建win32窗口程…

来自: seuliujiaguo的专栏



		

克拉玛依竟有一位51岁股市奇才,炒股2年靠1个铁律,存款惊哭老婆 潮望 · 燨燚
		




		

思想:先入栈一个元素,将出栈序列的第一个元素和该栈的栈顶元素比较,如果相同,那就让该元素出栈且出栈…

来自: z_xiao_xue的博客



		

从handler中获取一个消息对象,把数据封装到消息对象中,通过handler的send…方法把消息push到MessageQueue队列中。
Looper对象会轮询MessageQu…

来自: 携墨的博客



		




		

		




		




		




		

 
故障网帮你解答:CPU是什么、做什么用、一般CPU是接在哪里的,我们先来看看CPU是什么,CP…

来自: he_jian1的专栏



		

		

大概集中这几个方面:
1.性能的优化
2.功能的实现原理
3.基础知识的掌握程度
4.新技术的了解
关于这些问题,觉得下面几篇无论是文…

来自: 林锐波



		

MySQL目前主要有以下几种索引类型:
1.普通索引
是最基本的索引,它没有任何限制。

2.唯一索引
与前面的普通索引类似,不同的就是:索引列的…

来自: zzr881的博客



		




		

一、前言

        Sql是最重要的关系数据库操作语言,现在基本上任何与数据库相关的操作都离不开sql。所以说sql功能是很强大的。

        但是Sql对表的操作…

来自: 愤怒的懒洋洋的博客



		

一、前言

        上一章节我们说的是swagger-ui也就是swagger1,接下来我们说的是swagger升级版swagger2

    …

来自: 愤怒的懒洋洋的博客



		




		

一、前言

        MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置…

来自: 愤怒的懒洋洋的博客



		

1.用户的添加

useradd iceFrog

passwd iceFrog

更改密码:echo “dota”|passwd -stdin iceFrog

切换用户:su …

来自: 唐三十胖子的博客



		

方法一:(更新时间:2018/4/8)v3.3

注册时,在打开的Lice…

来自: 唐大帅的编程之路



		

因公司的需求,需要做一个爬取最近上映的电影、列车号、航班号、机场、车站等信息,所以需要我做一个爬虫…

来自: 昌昌



		




		




		

现在越来越流行在线看视频了,但是对于我得收藏癖爱好者,还是希望可以有比较好的资源网站的,尤其是种子、磁力链网站。所以就整理了一份干净、好用的TOP10出来:

先推荐一个下载磁力链的工具:

马…

来自: YXAPP的技术分享



		

转载请标明出处: http://blog.csdn.net/forezp/article/details/70148833
本文出自方志朋的博客

错过了这一篇,你可能再也学不会 Sp…

来自: 方志朋的专栏



		




		

引入element后,由于网络速度较慢,发现页面运行起来,比较卡顿,于是将其下载到本地
1.下载静态资源
element-ui 官网 :http://element…



		

vue-cli3脚手架/单文件/环境搭建。vue3.x版本相对于2.x版本做了许多地方的优化,个人总结主要还是使用上使开发者更加一目了然,配置起来也更加的方便,减少了各种webpack里面的lo…

来自: 欢迎来到☆槿畔☆的博客



		




		




		

前言
MVVM是一种架构模式,本文会涉及一小点vue代码,以及一篇简单的springboot的代码,建议在阅读本文档前先对这两门技术做一些学习。
什么是MVVM
MVVM是三个单词…



		

主要功能:
1、 解决服务之间代码耦合
2、 使用消息队列,增加系统并发处理量
主要应用场景:
1…

来自: 熊局长的博客



		

一:数据库缓存
二:静态缓存
三:动态缓存
1.数据库缓…

来自: 猪精的博客



		

下载地址https://s3.amazonaws.com/psiphon/web/mjr4-p23r-puwl/zh/download.html#direct

 …

来自: www.mayixiaocao.cn



		

在学习Vue的过程中,官方网站都是给了非常详细的介绍,所以初始化大型单页应用,官网给的参考资料地址:https://cn.vuejs.org/v2/guide/installation…



		




		

一、前言

Sql是最重要的关系数据库操作语言,现在基本上任何与数据库相关的操作都离不开sql。所以说sql功能是很强大的。

我们常用的sql关键字不外乎 group by…

来自: 愤怒的懒洋洋的博客



		

最新版的Proxyee-down为3.12(2018.10更新),因为作者在3.x后的版本中并未发布exe版…

来自: shadandeajian的博客



		

1
【单选题】我国陆地领土面积排名世界第几?(C)
A、1
B、2
C、3
D、4
2
【单选题】以下哪个国家不属于金砖五国(BRICS)?(B)
A、中国
B、日本
C…

来自: ling_wang的博客



		

 

 

 

本文由@唐三十胖子出品,转载请注明出处。  文章链接:https://blog.csdn.net/iceSony/article/details/84667551

 

 

 …

来自: 唐三十胖子的博客



		

问题总结:
在Windows平台下如果PHP使用的是IIS的话那么php在上传文件时是先将文件上传到一个临时目录下的


来自: psw的博客



		

大概想了一个方法,虽然看起来也不怎么专业,但感觉…

来自: u010569419的博客



		

思路就是1.获得点击左键时当前鼠标的坐标 2.获得移动后鼠标的坐标 3.窗体的坐标=移动后的鼠标坐标-移动前的鼠标坐标

pr…

来自: Maybe_ch的博客



		




		




		

https://www.centos.org/download/

根据下图所示,查询以前版本,为什么不用最新版?你可以想想!

       滑动到第二张图所示区域,我…

来自: u010569419的博客



		




		

一、集合概述

        对于集合,STL 的 set 相信大家都不陌生,它的底层实现是红黑树。无论插入、删除、查找都是 O(log n) 的时间复杂度。当然,如果用哈希表来实现集合,插入、…

来自: WhereIsHeroFrom的博客



		

从名字就不难看出,这是一款有着船新体验,门槛低,需要安卓手机就能正常运行。但相对应的,功能也比同类应用要强大,也更新了多个版本「解封助手、高品质音乐」等工具的软件。

 

 

一个奇鸽船新…

来自: 一个奇鸽最新版的小网站



		

随着计算机语言的发展,Python也跻身于语言排行的常青树。要是说Python是最目前最火爆的语言,应该没有人反驳吧。在当下的人工智能浪潮中,Python可以说是C位出道,成功引起大家的注意的了。…

来自: CSDN学院



		




		

我也有幸…



		






        

没有更多推荐了,返回首页

你可能感兴趣的:(消息队列面试相关)