1.kafka问题列表
- kafka的使用,生产者和消费者配置?序列化方式,如何保证kafka producer发送一条消息,至少发送一次?
- kafka offset了解吗,自动提交还是手动提交?
- kafka分区了解?如何查询某个topic的各分区消费情况
- kafka SimpleConsumer使用过吗?
- kafka 和zk的关系?zk对于kafka来说有什么作用?
- kafka 日志存储?
- kafka zero-copy?
- kafka controller leader选举
- kafka partition leader选举
- kafka rebalance问题
- kafka consumer sessionTimeout导致重复消费问题
- kafka producer批量发送原理
2.kafka配置
- kafka生产者配置
--broker-list
kafka消费者配置
3.offset管理
offset的管理方式一般有两种:
1) zk管理 (zk可能成为瓶颈)
2) kafka自身管理 (效率更高)
4.分区管理
1) 什么是分区,为什么要分区
一个topic的消息如果数量巨大,那么单个节点处理可能会出现瓶颈,所以讲一个topic的消息划分给多个节点,成为分区。
多个分区可以实现高并发处理消息,并减轻流量和磁盘等压力,另外分区可以在创建topic时,根据预估的流量进行选择。
5.日志管理
1) kafka消息是存储在磁盘的
2) kafka消息是顺序写磁盘的,所以很快
3)日志文件分为索引文件和数据文件,每个文件的名字以下一个文件的开始offset命名
4) 日志文件的大小可以设置,一般为500M
5) 索引文件采用稀疏索引,也是空间和时间的平衡选择
6.消费组管理
1) 每个topic可以有多个消费组,一般用来处理不同的业务逻辑
2) 每个topic的消费组独立消费数据
3) 每个topic的消费组独立维护自己的offset
7.leader选举
1) 分区的leader选举: 从该分区的从节点中选出
8.zero-copy
零拷贝: 直接从内核的页缓存复制到socket缓冲区,避免与用户空间缓冲的交互
9.kafka生产者批量发送原理
1) 生产者的消息是批量发送的
2) 生产者的消息是定时发送的
3) 生产者会先获取 所有分区leader节点的信息,缓存下来
4) 根据消息的key进行哈希,计算出对应的分区,并归类
5) 批量发送