这是我参与【第五届青训营】伴学笔记活动的第十天
什么是消息队列
保存消息的一个容器,本质上来讲,是一个队列,但是要求高并发、高可用,高吞吐。
使用场景: 解耦 削峰 异步 日志处理
发展历程
有哪些业界消息队列
kafka
基本概念与结构
举例:发布和订阅系统
为了解决消息间通信繁忙的问题,我们可以理解为引入了一个中间件(消息队列),发送方在发送信息的时候,不是直接发送到接收方,而是发送信息到中间件,接收方通过中间件获取自己想要的信息。
在这个过程中,我们可以把发送方理解为生产者,接收方认为是消费者。
生产者发布信息,消费者订阅信息(通过中间件) ,引出一个问题,消费者如何拿到自己想要的数据,这个问题的解决方法就是主题(topic),生产者将不同主题的信息发布到中间件(kafka)中,消费者通过订阅不同的主题来消费自己想要的数据。
在主题下面会有分区,分区可以实现分布在不同的服务器上,生产者将数据存储在主题下的不同分区里面 ,两种模式:1.生产者指定分区 2.分区器(一个算法)通过消息的键(一个标记)来安排数据的存储空间
我们现在可以知道一条消息可能带有以下几个数据:1.主题 2.分区 3.键 4.值(想传送的数据)
那消费者如何读取数据呢?引出**偏移量 **
偏移量(offset):第几个
一个分区里面,每个消息的偏移量都是唯一的
消费者只能顺序读取
这样的话我们就实现了一个borker,borker里面包含主题,分区、
borker为传来的消息根据分区设置偏移量,将其存储在磁盘上,borker也为消费者提供服务,提供响应。
多个Borker集群就是kafka集群,这样就提供了消息的安全性。在这个集群中可能还会有一个集群负责控制器的角色。
帮助kafka提高吞吐和稳定性的feature
- producer: 批量发送,数据压缩
- broker: 顺序写,消息索引,零拷贝
- consumer: rebanlance
BMQ
与kafka比较:
运维操作:
架构:
Rerfence