开发者学堂课程【分布式消息系统 Kafka 快速入门:消息队列介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/98/detail/1600
消息队列介绍
内容简介:
1.消息队列
2.消息队列的两种模式
3.为什么需要消息队列
1.消息队列
首先,客户端A跟客户端B要进行发送数据,A要给B发送数据,正常的是他们俩直接交互,就是A发送B接收,要同步,就是A发送的时候B挂了,发送不了数据,是不行的。
第二个,A发送是10兆每秒,B只能按5兆每秒接收,如果能正常工作的话,是会丢数据的,要是不丢数据,则B这边有可能就崩了。
中间要有一个消息队列做一个缓存,Kafka 也是这样,就是A产生数据不直接发送给B,而是发送给消息队列,然后 B来接收消息。
2.两种模式
1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)
点对点模式通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。
2)发布/订阅模式(一对多,数据产生后,推送给所有订阅者)
发布订阅模式则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即使当前订阅者不可用,处于离线状态。
3.为什么需要消息队列
无论是点对点模式还是发布订阅模式,都有优点,它共同的优点就是消息队列的优点。
1)解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束,即A与B不用直接直连,通过一个中间队列连接。
2)冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的“插入-获取-刪除"范式中,在把一个消息从队列中删除之前需,要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存,直到你使用完毕。即备份数据,它本身消息队列的也是缓存数据的。
3)扩展性:集群能力,因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。
4)灵活性&峰值处理能力:灵活性就是扩展性带来的一个优势,峰值处理能力是你扩展把机器扩展多了,你所有的处理能力是不是提升了。
5)可恢复性:数据丢了可以找回。
6)顺序保证:数据的顺序保证。
7)缓冲:均衡两边的一个速度,相对来说均衡两年的速度做很重要的。
8)异步通信:A的发送数据的时候, B掉了也无所谓。
以上是消息队列的优点,无论是点对点模式还是发布订阅模式都具有。