消息队列核心功能与选型优化分析.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

四Java面试突击专题

消息队列篇

===图灵:楼兰===

一、MQ有什么用?有哪些具体的使用场景?

MQ:MessageQueue,消息队列。队列是一种FIFO先进先出的数据结构。消息

由生产者发送到MQ进行排队,然后由消费者对消息进行处理。QQ、就是典

型的MQ场景。

MQ的作用主要有三个方面:

1、异步:

例子:快递。快递员-菜鸟驿站-客户

作用:异步能提高系统的响应速度和吞吐量。

2、解耦:

例子:《Thinkinginjava》-编辑社

作用:服务之间进行解耦,可以减少服务之间的影响,提高系统的稳定性和可扩展

性。

另外,解耦可以实现数据分发。生产者发送一个消息后,可以由多个消费者来

处理。

3、削峰:

例子:长江涨水-三峡大坝

作用:以稳定的系统资源应对的流量冲击。

MQ的缺点:

1、系统可用性降低:一旦MQ宕机,整个业务就会产生影响。高可用

2、系统的复杂度提高:引入MQ,数据链路就会变得很复杂。如何保证消息不

丢失?消息不会重复调用?怎么保证消息的顺序性?、、、、、

3、数据一致性:A系统发消息,需要由B、C两个系统一同处理。如果B系统处理成

功、C系统处理失败,这就会造成数据一致性的问题。

二、如何进行产品选型?

Kafka

优点:吞吐量非常大,性能非常好,集群高可用。

缺点:会丢数据,功能比较单一。

使用场景:日志分析、大数据

RabbitMQ

优点:消息可靠,功能全面。

缺点:吞吐量比较低,消息积累会严重影响性能。erlang语言不好定制。

使用场景:小规模场景。

MQ

优点:高吞吐、高性能、高可用,功能非常全面。

缺点:开源版功能不如云上商业版。文档和周边生态还不够成熟。客户端只支

持java。

使用场景:几乎是全场景。

三、如何保证消息不丢失?

1、哪些环节会造成消息丢失?

2、怎么去防止消息丢失。

2.1生产者发送消息不丢失

kafka:消息发送+回调

MQ:1、消息发送+回调。2、事务消息。

RabbitMQ:1、消息发送+回调

2、手动事务:channel.txSelect()开启事务,channel.txCommit()提交事务,

channel.txRollback()回滚事务。这种方式对channel是会产生阻塞的,造成吞吐量

下降。

3、PublisherConfirm。整个处理流程跟MQ的事务消息,基本是一样

的。

2.2MQ主从消息同步不丢失

MQ:1、普通集群中,同步同步、异步同步。异步同步效率更高,但是有

丢消息的风险。同步同步就不会丢消息。

2、Dledger集群-两阶段提交:

RabbitMQ:普通集群:消息是分散的,节点之间不会主动进行消息同步,是

有可能丢失消息的。

镜像集群:镜像集群会在节点之间主动进行数据同步,这样数据安全性得到提

高。

Kafka:通常都是用在允许消息少量丢失的场景。acks。0,1,all

2.3MQ消息存盘不丢失

MQ:同步刷盘异步刷盘:异步刷盘效率更高,但是有可能丢消息。同步刷

盘消息安全性更高,但是效率会降低。

RabbitMQ:将队列配置成持久化队列。新增的Quorum类型的队列,会采用Raft

协议来进行消息同步。

2.4MQ消费者消费消息不丢失

MQ:使用默认的方式消费就行,不要采用异步方式。

RabbitMQ:autoCommit-手动提交offset

Kafka:手动提交offset

四、如何保证消息消费的幂等性?

其实就是要方式消费者重复消费消息的问题。

所有MQ产品并没有主动解决幂等性的机制,需要由消费者自行控制。

MQ:给每个消息分配了个MessageID。这个MessageID就可以作为消费

者判断幂等的依据。这种方式不太建议。

方式就是自己带一个有业务标识的ID,来进行幂等判断。OrderID

统一ID分配。

五、如何保证消息的顺序?

全局有序和局部有序:MQ只需要保证局部有序,不需要保证全局有序。

生产者把一组有序的消息放到同一个队列当

您可能关注的文档

文档评论(0)

199****9598 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档