IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 消息队列相关知识点总结 -> 正文阅读

[大数据]消息队列相关知识点总结

消息队列

1.为什么要用消息队列

解耦,异步,削峰
(1)解耦
如果系统中存在A,B,C,D四个子系统,A系统需要绑定请求至BCD,若业务需要,B不再需要接收来自于A的请求,或者新增E系统对接A系统,则需要频繁修改A系统代码,大大增加了系统的耦合性,如果加入消息队列,A系统只需要把数据发送至mq,下游系统选择消费即可。
(2)异步
一个完整的请求,需要在ABC中进行写库操作,写A库50ms,写B库100ms,写C库80ms。则请求总共花费50+100+80=230ms;若引用消息队列,则A库写库完成后回传结果,B,C异步操作。总耗时50ms。(考虑补偿机制)
(3)削峰
一个系统高峰期的qps为5000,但mysql能承受的qps大概在2000左右。倘若不引用消息队列,则mysql容易宕机;引入消息队列后,将消息存放在消息队列中,下游数据操作按照2000qps进行调用,等高峰期过后,可以继续消费。

2.MQ缺点

(1)系统可用性降低。若引入mq后,ABCD系统都依赖于mq,mq宕机后,则系统崩溃
(2)系统复杂性提高。需要考虑消息丢失,消息重复消费,消息保持顺序性消费等问题。
(3)数据一致性问题。如果有个订单系统,库存,订单等操作必须保持一致性,若中途宕机,则需要回滚/补偿等操作

消息队列选型对比

对比

(1)单机吞吐量
ActiveMQ/RabbitMQ:万级
RocketMQ/Kafka:十万级
(2)时效性
RabbitMQ微妙级,其他都是毫秒级,但是毫秒级就用户体验而言已经足够
(3)可用性
ActiveMQ,RabbitMQ :主从结构 ,可用性高
RocketMQ/Kafka:分布式架构,拓展性和可用性极高
(4)消息可靠性
ActiveMQ: 一定情况下存在丢消息的可能(较低概率)
RabbitMQ:基于私信队列机制,消息一般不会丢失
RocketMQ/Kafka:通过配置可以实现消息的0丢失

总结

ActiveMQ偶尔会有消息丢失的情况发生,且社区不够活跃;
RabbitMQ基于erlang语言开发,二开难度大。但有实用的后台管理界面,方便操作;
RocketMQ,阿里开发,体系成熟,支持分布式;
Kafka:scala开发,仅支持一些核心功能,支持大吞吐量,但会有消息重复消费的情况出现,多用于大数据处理

3.消息队列保持可用性

RabbitMQ

普通集群模式

在这里插入图片描述
(1)上游发送消息至RabbitMQ集群,MQ会随机选取一个实例进行数据的存储,其他的实例只会同步元数据。如果消费的并非是存储实际数据的实例,则需要通过元数据拉取对应存储消息的queue。
(2)频繁的拉取数据会造成性能的消耗,若某台机器宕机,可能会导致整套集群不可用;若开启MQ持久化,也必须要等到数据恢复后才可使用

镜像集群

镜像集群
镜像集群模式与普通集群不同的是,生产者生产消息后,所有的queue都会同步元数据和实际数据。

好处在于任何一台机器宕机,都能保证消息消费的可用性。但是同步数据的性能消耗太大,如果新增一个节点,也会同步queue中的所有消息,服务器压力大,且没有线性拓展性。

Kafka

在这里插入图片描述
Kafka属于分布式消息队列,由多个broken组成,每个broken可看做一个节点;当创建一个topic时,topic会划分为多个partition,每个partition存在于不同的broken中,这样每个机器上可以存放topic中的一部分数据。

Kafka0.8以前,如果一个broken宕机,则该机器上的partition中存放的数据丢失。不可读也不可写。
Kafka0.8以后,增加lHA机制,也就是replica副本机制。每个partition上的数据都会同步到其他机器上,同步完成后会从所有的replica副本中选举出leader,与消费者和生产者交互。倘若某个leader宕机,则会从剩下的replica副本中重新选举leader,实现了高可用性。但要注意数据一致性。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:28:56  更:2021-08-11 12:30:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 16:15:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码