【kafka】一、消息队列
在高并发的应用场景中,由于来不及同步处理请求,接收到的请求往往会发生阻塞。例如,大量的插入、更新请求同时到达数据库,这会导致行或表被锁住,最后会因为请求堆积过多而触发“连接数过多的异常” 的错误。因此,在高并发的应用场景中需要一个缓冲机制,而消息队列则可以很好地充当这样一个角色。消息队列通过异步处理请求来缓解系统的压力。
什么是消息队列
“消息队列” (Message Queue, MQ)从字面来理解,是一个队列,拥有先进先出(FIFO)的特性。它主要用于不同进程或线程之间的通信,用来处理一系列的输入请求。消息队列采用异步通信机制。即:消息的发送者和接收者无须同时与消息队列进行数据交互,消息会一直保存在队列中,直至被接收者读取。每一条消息记录都包含详细的数据说明,包括数据产生的时间、数据类型、特定的输入参数。
消息队列的应用场景
应用解耦:多个应用可通过消息队列对相同的消息进行处理,应用之间相互独立,互不影响;
异步处理:相比于串行和并行处理,异步处理可以减少处理的时间;数据限流:流量高峰期,可通过消息队列来控制流量,避免流量过大而引起应用系统崩溃;
消息通信:实现点对点消息队列或聊天室等。
1.应用解耦,由于消息与平台和语言无关,并且在语法上也不再是函数之间的调用,因此,消息队列允许应用接口独立地进行扩展,只用应用接口遵守同样的接口约束。
举例,用户使用客户端上传一张个人图片。(1)上传系统将图片信息(如唯一ID、图片类型、图片尺寸等)批量写入消息队列,写入成功后会将结果直接返回给客户端。(2)人脸识别系统定时从消息队列中读取数据,完成对新增图片的识别。

图片上传系统无须关心人脸识别系统是否对上传的图片进行了处理,它只需要关心是否成功将图片信息写入消息队列。由于用户无须立即知晓人脸识别的结果,因此人脸识别系统可选择不同的调度策略来处理
2.异步处理,用户在注册账号时,服务程序需要给用户发送邮件注册信息和短信注册信息。比较传统的做法是-通过串行和并行的方式来实现。
(1)串行方式:先将用户注册信息写入数据库,然后发送短信注册信息,再发送邮件注册信息。以上三个任务全部完成后,才会将结果返回给用户。假设这三个阶段的耗时均为20ms,不考虑网络等其他消耗,则整个过程需耗时60ms。

(2)并行方式:先将用户注册信息写入数据库,然后在发送短信注册信息的同时还发送邮件注册信息。以上任务全部完成后才会将结果返回给用户。

针对上述应用场景,采传统方式时,系统的性能(如并发量、吞吐量、响应时间等)会产生瓶颈。此时需要引入消息队列异步处理非必要业务环节

用户将注册信息写入数据库约耗时20ms (和串行和并行的处理时间相同) 。短信和邮件注册信息写入消息队列后会直接将结果返回给用户。由于写入消息队列的速度非常快,基本可以忽略。另外, “通过异步读取消息队列中的短信注册信息”过程和“邮件注册信息”过程相当于同时进行的,那么整个过程约耗时20ms.
从上面的分析可以看出,在调整架构后,系统的整体处理时间是串行方式的1/3,是并行方式的1/2。
3.数据限流:数据限流也是消息队列的常用场景之一,一般在促销和“秒杀”活动中使用得较为广泛。例如,在电商的“双11"活动中,由于瞬间的数据访问量过大,服务器接收到的数据请求·过大,则导致服务器上的应用服务无法处理请求而崩溃。为了解决这类问题,一般需要先将用户请求写入消息队列(相当于用消息队列做一次缓冲),然后服务器上的应用服务再从消息队列中读取数据。

数据限流具有以下优点:·用户请求写数据到消息队列时,不与应用业务服务直接接触,中间存在一次缓冲。这极大地减少了应用服务处理用户请求的压力。可以设置队列的长度,用户请求遵循FIFO(先进先出)原则。后来的用户请求处于队列之外时,是无法秒杀到商品的,这些请求会直接被舍弃,返给用户"商品已售完”的结果。
4.消息通信:消息队列具有高效的通信机制,所以其在点对点通信和聊天室通信中被广泛应用。

【kafka】一、消息队列的更多相关文章
- 【转】快速理解Kafka分布式消息队列框架
from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...
- Kafka 分布式消息队列介绍
Kafka 分布式消息队列 类似产品有JBoss.MQ 一.由Linkedln 开源,使用scala开发,有如下几个特点: (1)高吞吐 (2)分布式 (3)支持多语言客户端 (C++.Java) 二 ...
- Kafka分布式消息队列
基本架构 Kafka分布式消息队列的作用: 解耦:将消息生产阶段和处理阶段拆分开,两个阶段互相独立各自实现自己的处理逻辑,通过Kafka提供的消息写入和消费接口实现对消息的连接处理.降低开发复杂度,提 ...
- ELK之使用kafka作为消息队列收集日志
参考:https://www.cnblogs.com/fengjian2016/p/5841556.html https://www.cnblogs.com/hei12138/p/7805475 ...
- SpringBoot开发案例之整合Kafka实现消息队列
前言 最近在做一款秒杀的案例,涉及到了同步锁.数据库锁.分布式锁.进程内队列以及分布式消息队列,这里对SpringBoot集成Kafka实现消息队列做一个简单的记录. Kafka简介 Kafka是由A ...
- 快速理解Kafka分布式消息队列框架
作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ ==是什么 == 简单的说,K ...
- kafka分布式消息队列介绍以及集群安装
简介 首先简单说下对kafka的理解: 1.kafka是一个分布式的消息缓存系统: 2.kafka集群中的服务器节点都被称作broker 3.kafka的客户端分为:一是producer(消息生产者) ...
- [转载] 快速理解Kafka分布式消息队列框架
转载自http://blog.csdn.net/xiaolang85/article/details/18048631 ==是什么 == 简单的说,Kafka是由Linkedin开发的一个分布式的消息 ...
- kafka以及消息队列详解
Kafka 是LinkedIn 开发的一个高性能.分布式的消息系统. 用途:广泛用于日志收集.流式数据处理.在线和离线消息分发等场景. 1. Kafka 将消息流按Topic 组织,保存消息的服务器称 ...
- 测开之路七十三:用kafka实现消息队列之环境搭建
一:装java环境,确保java能正确调用 kafka下载地址:http://kafka.apache.org/downloads 下载并解压kafka: 新建两个文件夹,用于存放zookeeper和 ...
随机推荐
- SQL经典练习题50--mysql
--1.学生表 Student(Sid,Sname,Sage,Ssex)? --Sid 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表? Course(Cid, ...
- Linux搭建DHCP服务器
Linux搭建DHCP服务器 实验目标: 通过本实验掌握基于Linux的DHCP服务器搭建技能. 本实验包含内容为yum的认识与使用,磁盘挂载的概念与使用,DHCP原理及配置,systemctl服 ...
- 阿里巴巴 -- MySQL DBA 面试题
1.MySQL的复制原理以及流程 (1).先问基本原理流程,3个线程以及之间的关联: (2).再问一致性延时性,数据恢复: (3).再问各种工作遇到的复制bug的解决方法. 2.MySQL中myisa ...
- POJ 1651:Multiplication Puzzle(区间DP)
http://poj.org/problem?id=1651 题意:给出n个数字,每取中间一个数,就会使得权值加上中间这个数和两边的乘积,求取剩两个数最少的权值是多少. 思路:区间dp. 一开始想了挺 ...
- [AI开发]目标跟踪之行为分析
基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...
- Atom常用插件、快键键、使用技巧
atom 中间有一条白色的虚线,怎么去掉? Settings/Packages/wrap-guide disable 自动换行 File-Settings-Editor-Soft Wrap(打勾即可) ...
- 关于在记事本写入"\n"不显示换行的原因
Linux系统下直接使用 "\n" 即可换行 windows下需要使用 "\r\n"
- 20140115-URL编码与解码
UrlEncode()方法,有两个类都有这个方法即HttpUtility.UrlEncode和Server.UrlEncode 区别: 1.HttpUtility.UrlEncode,HttpUtil ...
- SSAS Tabular关系设计--时间最小粒度维度
这两天设计的T2模型,涉及日期维度表中粒度的选择,因为一般实际销售达成ACT表是按天为标准记录的,而销售目标表TGT一般是按月记录,特此总结一下建模技巧. 数据仓库: 时间维度表,最小粒度为DATE. ...
- SSAS 多维/表格设计模型--事实表与维表的关联
表格设计模型中,同多维设计模型相似, 维表和事实表相互独立,通过关系数据库中的外键来联系,互相关联构成一个统一的架构. DB中外键是需要唯一性约束的,即A表某列建立主键或者唯一键后,B表才可以引用为外 ...