消息队列(一) | 青训营笔记

87 阅读2分钟

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

image.png

消息队列

消息队列(MQ),指保存消息的一个容器,本质是个队列。但是这个队列,需要支持高吞吐,高并发,高可用

前世今生

image.png

消息队列发展历程

image.png

业界消息队列对比

image.png

消息队列-Kafka

使用场景

image.png

如何使用Kafka

image.png

基本概念

image.png Partition:通常topic会有多个分片,不同分片直接消息是可以并发来处理的,可以提高单个Topic的吞吐率

基本概念 - Offset

image.png 每一个Partition来说,每一条消息都有一个唯一的Offset

基本概念 - Replica

image.png Replica:分片的副本,分布在不同的机器上,可用于容灾(leader掉了,follower补上),Leader对外服务,Follower异步去拉去leader的数据进行一个同步,如果leader掉了,可以将Follwer提升成leader再对外进行服务
ISR:意思是同步中的副本,对于Follwer来说,始终和Leader有一定差距的,但当这个差距比较小的时候,我们就可以将这个Follwer副本加入到ISR中,不在ISR中的副本不允许提升成Leader

数据复制

副本分布图

image.png 一个Broker代表一个Kafka节点,所有的Broker组成以了一个集群。图中的整个集群,包含了4个Broker机器节点,集群有两个Topic,Topic1和Topic2,Topic1有两个分片,Topic2有一个分片,每个分片都是三副本的一个状态。这里中间有一个Broker同时也扮演了Controller的角色,Controller是整个集群的大脑,负责对副本和Broker进行分配

Kafka架构

image.png 而在集群之上,还有一个模块是ZooKeeper,这个模块其实是存储了集群的元数据信息,比如副本的分配信息等等,Controller计算好的方案都会放到这里

一条消息自述

image.png

image.png

Producer - 批量发送

image.png

Producer - 数据压缩

image.png

Broker - 数据存储

image.png

Broker - 消息文件结构

image.png

Broker - 磁盘结构

image.png

Broker - 顺序写

image.png

Broker - 如何找到消息

image.png

Broker - 偏移量索引文件

image.png

image.png

Broker - 时间戳索引文件

image.png

Broker - 传统数据拷贝

image.png

Broker - 零拷贝

image.png

Consumer从Broker中读取数据,通过sendfile的方式,将磁盘读到os内核缓冲区,直接转到socket buffer进行网络发送
Producer生产的数据持久化到Broker,采用mmap文件映射,实现顺序的快速写入

Consumer - 消息的接收端

image.png

Consumer - Low Level

image.png

Consumer - High Level

image.png

Consumer - Rebalance

image.png

image.png

Kafka缺点

Kafka - 数据复制问题

image.png

Kafka - 重启操作

image.png

Kafka - 替换、扩容、缩容

image.png

Kafka - 重启操作

image.png

image.png

image.png