文章目录
Kafka在Zookeeper中都存什么信息
主要有
- /kafka/brokers/ids 记录有哪些服务器正常工作
- /kafka/brokers/topics/{topicName}/partitions/0/{“leader”:1,“isr”:[0,1,2]} 记录leader是谁,和isr信息
- /kafka/controller/{“brokerid”:0} 记录controller节点,辅助leader选举
kafka工作流程
- Bbroker启动后会想zk注册
- Controller节点谁先注册就是谁
- Controller监听ids中broker节点变化
- Controller决定Leader选举 选举规则:在ISR中存活为前提,按AR(所有副本)中的优先顺序
Kafka的高效读写数据(为什么这么快)
- kafka本身是分布式集群,可以采用分区技术,并行度高
- 读数据采用的是稀疏索引,可以快速定位要消费的数据
- 顺序写磁盘,Kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表名,同样的磁盘,如果顺序写能到600M/s,而随机写的速度只有100K/m。这与磁盘的机械机构有关,顺序写省去了大量的磁头寻址的时间
- 采用页缓存+零拷贝技术
零拷贝: kafka的数据逻辑处理交给了生产者和消费者处理,broker不关心存储的数据,所以就不用走应用层,传输效率高
页缓存:Kafka重度依赖底层操作系统的提供的pageCache功能。当上层有写操作时,操作系统只是将数据写入PageCache中。当读数据发生时,先在pageCache中查找,如果找不到,再去磁盘中读取。实际上PageCache是尽可能多的把空闲的内存都当作磁盘缓存来使用了。
Kafka的数据积压(提升吞吐量)
- 提升Kafka的消费能力,增加分区,同时提升并行度
- 加大一次消费数据的条数