消息队列学习 | 青训营笔记

60 阅读2分钟

这是我参加「第五届青训营 」伴学笔记创作活动的第 11 天

本次笔记记录学习消息队列的内容,包含以下几个章节

  1. 消息队列是什么
  2. 消息队列的应用场景
  3. 消息队列的原理

消息队列是什么

消息队列(Message Queue),指保存消息的一个容器,本质上就是一个存储消息的队列。但是这个队列具有高吞吐,高并发,高可用的特性。所以我们研究消息队列,最主要就是研究如何将一个存储消息的队列达到高吞吐,高并发,高可用。

消息队列的应用场景

  • 解耦
  • 异步
  • 削峰
  • 日志处理

解耦

在应用需要进行一些存储服务,但是并不需要等待存储服务结束才能达到应用的目的时,可以使用消息队列

异步

在应用有多个存储操作时,可以将多个存储操作异步完成。着多个存储操作可以存储在消息队列中。

削峰

当有大量请求抵达服务时,可能会导致服务卡顿宕机。这个时候使用消息队列缓存请求,服务按自己的步调去执行即可。

日志处理

应用需要写日志,也可以暂时向消息队列中递交消息,稍后再存储。

消息队列的原理

现在主流的消息队列实现有多种,有kafka、rocketMQ、BMQ。

这里主要写一下有kafka的原理。每一个消息队列实现都有自己的实现、优缺点和原地。但是目的都是为了达到高吞吐,高并发,高可用的目的。

kafka的基本概念是生产者和消费者向kafka集群中推入和拉出消息进行操作。

集群是一个物理概念,集群中包含了Topic逻辑队列,逻辑队列就是针对一组消费者生产者的队列。

逻辑队列中包含了不同的Partition分片,分片被用于并发存储消息。

分片的结构是按照offser进行顺序排列的。

对于分片而言,它可能是leader分片,也可能是follower分片。leader分片就是生产者消费者使用的分片,follower分片跟踪leader分片的变换,相当于做异步备份。

至于为什么kafka有这么高的吞吐量和可用性,和它在数据存储的格式、物理上的顺序存储等等都有关系。 这里暂时不再深入。