这是我参与「第五届青训营 」伴学笔记创作活动的第 31 天
消息队列
消息队列(MQ),指保存消息的一个容器,本质是个队列。但是这个队列,需要支持高吞吐,高并发,高可用
前世今生
消息队列发展历程
业界消息队列对比
消息队列-Kafka
使用场景
如何使用Kafka
基本概念
Partition:通常topic会有多个分片,不同分片直接消息是可以并发来处理的,可以提高单个Topic的吞吐率
基本概念 - Offset
每一个Partition来说,每一条消息都有一个唯一的Offset
基本概念 - Replica
Replica:分片的副本,分布在不同的机器上,可用于容灾(leader掉了,follower补上),Leader对外服务,Follower异步去拉去leader的数据进行一个同步,如果leader掉了,可以将Follwer提升成leader再对外进行服务
ISR:意思是同步中的副本,对于Follwer来说,始终和Leader有一定差距的,但当这个差距比较小的时候,我们就可以将这个Follwer副本加入到ISR中,不在ISR中的副本不允许提升成Leader
数据复制
副本分布图
一个Broker代表一个Kafka节点,所有的Broker组成以了一个集群。图中的整个集群,包含了4个Broker机器节点,集群有两个Topic,Topic1和Topic2,Topic1有两个分片,Topic2有一个分片,每个分片都是三副本的一个状态。这里中间有一个Broker同时也扮演了Controller的角色,Controller是整个集群的大脑,负责对副本和Broker进行分配
Kafka架构
而在集群之上,还有一个模块是ZooKeeper,这个模块其实是存储了集群的元数据信息,比如副本的分配信息等等,Controller计算好的方案都会放到这里
一条消息自述
Producer - 批量发送
Producer - 数据压缩
Broker - 数据存储
Broker - 消息文件结构
Broker - 磁盘结构
Broker - 顺序写
Broker - 如何找到消息
Broker - 偏移量索引文件
Broker - 时间戳索引文件
Broker - 传统数据拷贝
Broker - 零拷贝
Consumer从Broker中读取数据,通过sendfile的方式,将磁盘读到os内核缓冲区,直接转到socket buffer进行网络发送
Producer生产的数据持久化到Broker,采用mmap文件映射,实现顺序的快速写入