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

MQ: MessageQueue,消息队列。 队列是一种FIFO先进先出的数据结构。消息
由生产者发送到MQ进行排队,然后由消费者对消息进行处理。QQ、 微信 就是典
型的MQ场景。
MQ的作用主要有三个方面:
1、异步:
例子:快递。 快递员-> 菜鸟驿站<- 客户
作用:异步能提高系统的响应速度和吞吐量。
2、解耦:
例子:《Thinking in java》 -> 编辑社
作用:服务之间进行解耦,可以减少服务之间的影响,提高系统的稳定性和可扩展性。
另外,解耦之后可以实现数据分发。生产者发送一个消息后,可以由多个消费者来
处理。 例如java程序调用python程序,利用消息来处理。
3、削峰:
例子:长江涨水->三峡大坝
作用:以稳定的系统资源应对突发的流量冲击。
MQ的缺点:
1、系统可用性降低: 一旦MQ宕机,整个业务就会产生影响。高可用
2、系统的复杂度提高: 引入MQ之后,数据链路就会变得很复杂。如何保证消息不
丢失?消息不会重复调用?怎么保证消息的顺序性?、、、、、
3、数据一致性: A系统发消息,需要由B、C两个系统一同处理。如果B系统处理成
功、C系统处理失败,这就会造成数据一致性的问题。

二、如何进行产品选型?

1.Kafka
优点: 吞吐量非常大,性能非常好,集群高可用。
缺点:会丢数据,功能比较单一。
使用场景:日志分析、大数据采集
2.RabbitMQ
优点: 消息可靠性高,功能全面。
缺点:吞吐量比较低,消息积累会严重影响性能。erlang语言不好定制。
使用场景:小规模场景。
3.RocketMQ
优点:高吞吐、高性能、高可用,功能非常全面。
缺点:开源版功能不如云上商业版。官方文档和周边生态还不够成熟。客户端只支
持java。
使用场景:几乎是全场景

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

1、哪些环节会造成消息丢失?
2、怎么去防止消息丢失
2.1 生产者发送消息不丢失
kafka: 消息发送+回调
RocketMQ: 1、消息发送+回调。2、事务消息。
RabbitMQ: 1、消息发送+回调
2、 手动事务: channel.txSelect()开启事务, channel.txCommit()提交事务,
channel.txRollback()回滚事务。这种方式对channel是会产生阻塞的,造成吞吐量
下降。
3、Publisher Confirm。整个处理流程跟RocketMQ的事务消息,基本是一样
的。
2.2 MQ主从消息同步不丢失
RocketMQ:
1、普通集群中,同步同步、异步同步。异步同步效率更高,但是有丢消息的风险。同步同步就不会丢消息。
2、Dledger集群-两阶段提交:
RabbitMQ: 普通集群:消息是分散存储的,节点之间不会主动进行消息同步,是
有可能丢失消息的。
镜像集群:镜像集群会在节点之间主动进行数据同步,这样数据安全性得到提
高。
Kafka: 通常都是用在允许消息少量丢失的场景。acks。0,1,all
2.3 MQ消息存盘不丢失
RocketMQ: 同步刷盘 异步刷盘:异步刷盘效率更高,但是有可能丢消息。同步刷
盘消息安全性更高,但是效率会降低。
RabbitMQ: 将队列配置成持久化队列。新增的Quorum类型的队列,会采用Raft
协议来进行消息同步。
2.4 MQ消费者消费消息不丢失
RocketMQ: 使用默认的方式消费就行, 不要采用异步方式。
RabbitMQ: autoCommit -> 手动提交offset
Kafka: 手动提交offset

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

其实就是要方式消费者重复消费消息的问题。
所有MQ产品并没有提供主动解决幂等性的机制,需要由消费者自行控制
RocketMQ: 给每个消息分配了个MessageID。这个MessageID就可以作为消费
者判断幂等的依据。这种方式不太建议。
最好的方式就是自己带一个有业务标识的ID,来进行幂等判断。OrderID统一ID分配。

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

全局有序和局部有序: MQ只需要保证局部有序,不需要保证全局有序
生产者把一组有序的消息放到同一个队列当中,而消费者一次消费整个队列当中的
消息。
RocketMQ中有完整的设计,但是在RabbitMQ和Kafka当中,并没有完整的设计,
需要自己进行设计

RabbitMQ:要保证目标exchange只对应一个队列。并且一个队列只对应一个消费
者。
Kafka: 生产者通过定制partition分配规则,将消息分配到同一个partition。 Topic
下只对应一个消费者

六、如何保证消息的高效读写?

零拷贝: kafka和RocketMQ都是通过零拷贝技术来优化文件读写。
传统文件复制方式: 需要对文件在内存中进行四次拷贝。

零拷贝: 有两种方式, mmap和transfile
Java当中对零拷贝进行了封装, Mmap方式通过MappedByteBuffer对象进行操
作,而transfile通过FileChannel来进行操作。
Mmap 适合比较小的文件,通常文件大小不要超过1.5G ~2G 之间。
Transfile没有文件大小限制。
RocketMQ当中使用Mmap方式来对他的文件进行读写。commitlog。 1G
在kafka当中,他的index日志文件也是通过mmap的方式来读写的。在其他日志文
件当中,并没有使用零拷贝的方式。
kafka使用transfile方式将硬盘数据加载到网卡。

七、使用MQ如何保证分布式事务的最终一致性?

分布式事务:业务相关的多个操作,保证他们同时成功或者同时失败。
最终一致性: 与之对应的就是强一致性
MQ中要保护事务的最终一致性,就需要做到两点
1、生产者要保证100%的消息投递。 事务消息机制
2、消费者这一端需要保证幂等消费。 唯一ID+ 业务自己实现幂等
分布式MQ的三种语义:
at least once
at most once
exactly once:
RocketMQ 并不能保证exactly once。商业版本当中提供了exactly once的实现
机制。
kafka: 在最新版本的源码当中,提供了exactly once的demo。
RabbitMQ: erlang天生就成为了一种屏障。

八、让你设计一个MQ,你会如何设计?

两个误区: 1、 放飞自我,漫无边际。 2、纠结技术细节。
好的方式: 1、 从整体到细节,从业务场景到技术实现。2、以现有产品为基础。
RocketMQ
答题思路: MQ作用、项目大概的样子。
1、实现一个单机的队列数据结构。 高效、可扩展。
2、将单机队列扩展成为分布式队列。- 分布式集群管理
3、基于Topic定制消息路由策略。- 发送者路由策略,消费者与队列对应关系,消
费者路由策略
4、实现高效的网络通信。- Netty Http
5、规划日志文件,实现文件高效读写。- 零拷贝,顺序写。 服务重启后,快速还原
运行现场 。
6、定制高级功能,死信队列、延迟队列、事务消息等等。 - 贴合实际,随意发挥。

4.图灵学院-----阿里/京东/滴滴/美团整理----高频MQ消息队列篇相关推荐

  1. 10.图灵学院-----阿里/京东/滴滴/美团整理----安全验证篇

    一.什么是认证和授权?如何设计一个权限认 证框架? 认证: 就是对系统访问者的身份进行确认. 用户名密码登录. 二维码登录.手机短信登录.指纹.刷脸... 授权:就是对系统访问者的行为进行控制.授权通 ...

  2. 阿里云ACE共创空间——MQ消息队列产品测试

    一.产品背景 消息队列是阿里巴巴集团自主研发的专业消息中间件. 产品基于高可用分布式集群技术,提供消息订阅和发布.消息轨迹查询.定时(延时)消息.资源统计.监控报警等一系列消息云服务,是企业级互联网架 ...

  3. 阿里专有云OpenAPI开发实践之消息队列

    目录 阿里专有云OpenAPI开发实践之消息队列 环境介绍 文档资料 消息队列MQ产品的Endpoint 消息队列产品没有相应的SDK 简单调用示例 RAM授权 <开发指南>之外的Open ...

  4. BAT/头条/小米/京东/滴滴/美团...互联网大厂员工一年究竟能挣多少钱?

    点击"技术领导力"关注∆  每天早上8:30推送 本文转自:HR人力资源成长俱乐部 声明:本文数据部分来自所涉公司官方微信公众号(如:字节范儿),部分来自脉脉各公司职言区,另有部分 ...

  5. 阿里京东滴滴等大厂面试题汇总

    文章目录 11月面:京东一面[京东云与AI-协同办公]: 京东一面现场面[京东云与AI-平台创新组]: 京东二面: 11月面:滴滴视频面[橙心优选]: 11月面:国美零售[大数据-搜索组] 8月面:阿 ...

  6. 把最新JAVA面试真题(阿里/京东/菜鸟)整理出来,却被自己菜哭了

    前言 2020终于迎来了最后的两个月,这一年,全世界都不安定,被疫情包围,渐渐治愈和免疫,国内虽然看着和往常没有多大的区别,但对于经济的冲击,不知道又倒退了多少年?大大小小的公司面临倒闭或已破产,对于 ...

  7. 阿里技术分享:电商IM消息平台,在群聊、直播场景下的技术实践

    本文由淘宝消息业务团队李历岷(花名骨来)原创分享,首次发表于公众号"淘系技术",有修订和改动. 1.引言 本文来自淘宝消息业务团队的技术实践分享,分析了电商IM消息平台在非传统IM ...

  8. 阿里、京东、美团、滴滴的 Dubbo / JVM / Spring 面试题及答案(2)

    最近有很多朋友去目前主流的大型互联网公司面试(阿里巴巴.京东.美团.滴滴),面试回来之后会发给我一些面试题.有些朋友轻松过关,拿到offer,但是有一些是来询问我答案的. 我特意整理了一下,有很多问题 ...

  9. 2017派卧底去阿里、京东、美团、滴滴带回来的面试题

    转载自 2017派卧底去阿里.京东.美团.滴滴带回来的面试题及答案 一,阿里巴巴面试题 二,京东面试题 三,美团面试题 四,滴滴面试题 五,本次卧底面试得到的结论 通过面试题来看,可以看出目前互联网公 ...

  10. 横扫阿里、滴滴、美团后,3年经验的Java后端妹子整理出这份厚厚的面经!

    横扫阿里.滴滴.美团后,3年经验的Java后端妹子整理出这份厚厚的面经! 扫描下方海报二维码,试听课程: (课程详细大纲,请参见文末) ================================ ...

最新文章

  1. 独家 | 在Python中使用广义极端学生化偏差(GESD)进行异常检测(附链接)
  2. Facebook收购GrokStyle:布局AI零售
  3. RIA Service 的 SOAP EndPoint
  4. centos 安装java web_Centos上安装java web的环境
  5. 我学Delphi心得及笔记----字符串操作(第六讲)
  6. C#——继承[模拟Server类]初始化过程顺序DMEO
  7. 使用ABAP和JavaScript代码生成PDF文件的几种方式
  8. nike附近门店查询_不止5折!200+入手Nike、adidas,比“11.11”还便宜!
  9. P1941-飞扬的小鸟【dp】
  10. 服务器物理链路,【交换机在江湖对接案例】配置堆叠系统对接NLB服务器群集示例(通过物理链路环回方法)...
  11. mysql支持数据安全的引擎_MySQL 支持的存储引擎
  12. JS对数组对象按照某个字段进行排序
  13. 【Redis 开发与运维】总结篇
  14. 猿辅导(实习800/天)面试算法题详解
  15. hcia hdcp实验
  16. Fedora14 基于Qt的UDP传输文字聊天小软件实现 (Qt查询本地Ip、Qt本地时间显示、传输中文汉字实现、Qt的textedit自动滚屏实现、给QPushButton设键盘快捷实现)---续上
  17. 国外虚拟主机购买时的注意事项
  18. vue中watch的详细用法,带deep,immediate
  19. Altium Designer19(AD19)
  20. Emoji-Chat emoji表情包发送及显示兼容web端、移动端

热门文章

  1. LeetCode——线段树
  2. wireshark-filter帮助手册
  3. apfs扩容_MacBook Air 2015 换硬盘心得
  4. 安卓 Day 23 :利用视图翻页器实现引导项
  5. 本周开课 | 10年运营专家亲授,掌握9类运营的核心技能,强化运营实力
  6. 论文阅读(Multimodal Dialog Systems via Capturing Context-aware Dependencies of Semantic Elements)
  7. D3D9学习笔记之字体
  8. “笨办法学python”学习笔记-一些附加题
  9. MC9S12XS128nbsp;16位PWMnbsp;电…
  10. python多线程模块threading学习笔记(5)之锁Lock