Kafka
Kafka
Kafka
消费模式
- 点对点
- 发布订阅
架构
- Producer
- Consumer
- Consumer Group
- Broker
- 一个kafka节点就是一个Broker, 一个Cluster由多个Broker组成
- Topic
- Partition
- 一个Topic可以分布到多个Broker上(这个Topic会被分成多个Partition)
- Partition(物理概念)是一个队列, 内部有序(整体无序)
- 一个Message由key和value组成, 根据key进行hash散列(相同key会被分到同一个Partition中)
- Replica
- 节点的Partition会产生多个副本(一个leader和多个follower)
- leader中维护了动态ISR(in-sync replica set), 如果follower长时间没有进行同步, 就会被从ISR中删除
- 当leader挂掉, 会在ISR中选一个新leader
工作流程
- 每条数据有自己的offset(类似与在队列中的index)
- 每个Consumer会实时记录自己消费到了哪个offset, 以便从这个位置(offset+1)继续消费
- Producer -> Topic (Log with offset) -> Consumer
文件存储
- 一个Partition分为多个Segment(基本单位)
- 一个segment对应三个文件
- .log文件
- 存储数据
- .index文件
- 索引文件, 用类似二分法进行索引
- .timeindex文件
- 时间戳索引
- .log文件
高效读写
- 顺序写磁盘
- log文件采用追加写
- zero-copy
- 数据文件(.log)使用sendfile方式
- 索引文件(.index)使用mmap+write方式
kraft和zookeeper
- kafka旧版本使用zookeeper协调管理组件
- Broker发现
- 维护元数据信息(如offset)
- 协调leader选举
- 新版kafka放弃了zookeeper, 改用kraft
- 基于raft的kraft模式
- 一部分Broker会被指定成Controller
- 主控制器为active controller
- 将元数据写入__cluster_metadata内部主题
- 这个主题只有一个partition
- active controller为leader, 其他controller为follower
This post is licensed under CC BY 4.0 by the author.