目录:
一条消息在kafka是如何生产的?
一条消息在kafka是如何存储的?
一条消息在kafka是如何消费的?
Kafka为什么高性能?
Kafka为什么高可用?
一.一条消息在kafka是如何存储的?
1.1 客户端流程:
1.2 服务端流程:
二.一条消息在kafka是如何存储的
2.1数据结构
2.2数据读取
三. 一条消息在kafka是如何消费的?
3.1消费流程
3.2 消费者如何拉取数据
3.3 消费者消费进度如何保证
四. kafka是如何做到高可用的?
4.1 基于NIO的高并发网络结构
4.2 磁盘顺序IO
顺序读写在kafka源码体现:
写:提前批量申请segment+基于上次offset写入
读:从固定位置读取+size
4.3 零拷贝
传统的IO流程:
零拷贝kafka实现:
- selector写入数据时,通过FileChannel.transferTo实现零拷贝
2)-OffsetIndex的mmap实现零拷贝(将内核中读缓冲区(read buffer)的地址与用户空间的缓冲区(user buffer)进行映射,从而实现内核缓冲区与应用程序内存的共享)
4.4 批量处理
五. Kafka为什么高可用?
5.1-分区副本机制
a. 每个分区可以配置副本,主要用于容灾处理。比如leader副本挂了,可以再选择其他ISR的follower副本来作为leader副本,进而对外服务
b. 只有leader副本对外提供服务,follower副本不提供服务,只会跟leader副本保持数据同步
5.2-ACK机制
a. 对于高可靠性要求较高的场景,设置ack=all可以保证消息不会丢失
b.不丢失原理