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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 了解消息队列 -> 正文阅读

[大数据]了解消息队列

消息队列

什么是消息队列

消息队列(Message Queue)是一种进程间通信或者同一进程的不同线程间的通信方式。

消息:就是要传输的数据。

队列:是一种先进先出的数据结构,用来存放消息。

消息队列的模型如下:

生产者:产生数据的单位

消费者:消费数据的单位

消息队列的两种模式

点对点队列模型

它允许多个生产者往同一队列发送消息,但是多个消费者是竞争关系,一条消息只能被其中一个消费者收到处理,而后删除。

发布订阅模型

队列模型无法给每个消费者一份消息,并且如果为每个消费者创建一个全量消息队列,会将每份数据都复制多份,将会浪费大量的空间。

此时存放消息的容器变成了主题,订阅者需要先订阅主题才能收到主题的全量消息。如果只有一个订阅者的话,也就是队列模型了

RPC通信模型和消息队列通信模型

RPC(远程过程调用):一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。

引入MQ以后,由一次RPC变成了两次,生产者只和队列耦合,无需知道消费者的存在。

多了队列进行消息转储,相当于同步变异步

什么时候需要消息队列

  • 系统解耦

  • 异步通信

  • 流量削峰:避免流量过大导致应用系统挂掉,例如秒杀场景

    例子:常见的电商业务中支付订单场景:

    • 在引入MQ以后,订单支付只需要关注更新订单状态就行,其他不重要的事情交给MQ来通知,这便解决了最核心的问题,系统解耦。现在订单支付流程要更繁琐。

    • 引入MQ之后更新用户积分、通知商家等等步骤全部变成了异步执行,减少订单支付的整体耗时,提升订单系统的吞吐量,里一个应用场景,异步通信

      • 同步:每个流程按顺序来,到最后一个执行完,返回订单支付成功
      • 异步:支付之后,直接返回支付成功,后续的工作,在后边执行
    • 引入MQ之后,对于超出系统承载能力的场景,可以用MQ进行限流保护,即流量削峰

  • 数据流处理:日志服务,监控上报,分布式系统产生的海量数据流,如业务日志、监控数据等,针对这些数据进行实时或批量采集汇总,然后进行大数据分析是当前必备技术,消息队列完成此类数据的采集(Kafka)

常见消息中间件

  • RocketMQ

    使用Java编写,改造方便,是阿里的开源消息中间件,吞吐量高每秒十万+,保证高可用高性能,保证数据绝对不丢失,支持大规模的集群部署,线性扩展方便,支持各种高级功能,消息回溯、延迟消息等。

  • RabbitMQ

    使用Erlang编写。RabbitMQ保证数据不丢失,保证了高可用,即使部分机器宕机了还可以继续使用,它是在高级消息队列协议基础上完成的,支持较多的高级功能,如消息重试,死信队列等。但是它的吞吐量较低,大概就是每秒几万的样子,这样对于大型电商秒杀是不能胜任的,集群线性扩展比较麻烦,而且使用Erlang开发,对其改造比较困难。

  • Kafka

    使用Scala编写,主要应用在大数据领域,为大数据而生的消息中间件,主要是大数据的数据传输,日志和监控数据收集,最大的优势就是高吞吐量。性能较高,发送消息都是毫秒级。另外Kafka支持集群部署。但是它收到消息不是直接写到物理磁盘的而是先写入到磁盘缓冲区,可能会造成数据丢失。另外,功能比较单一,主要就是收发消息。

参考:Lowry的回答https://www.zhihu.com/question/54152397/answer/1802083263

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:45:16  更:2021-07-25 11:46:06 
 
开发: 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年11日历 -2024/11/22 23:37:06-

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