分区管理
分区副本机制
一个topic可以有多个partition , 合理的分区规则设置, 可以均匀分散消息, 实现负载均衡和水平扩展
多个订阅者可以从一个或多个分区中同时消费数据, 以支撑海量数据处理能力 ( 一个partition只能被同组的一个consumer消费 )
消息以追加的方式存储到分区中, 多个分区顺序写磁盘的总效率要比随机写内存还要高, 是高吞吐率的重要保证之一
分区leader选举
如果某个partition的leader挂了, followers会产生一个新leader,所以的读写都会转移到新leader
并没有采用多数投票赢得选举的机制
zookeeper上针对每个topic会维护一个ISR的集合 ( in-sync replica 已同步的副本, 消息落后leader在容忍范围内 )
在ISR集合中, 才有资格被选为leader, 先选第一个做为leader, 如果不行依次类推
假设topic有f+1个副本, kafka可以容忍f个不可用
当然如果ISR里面的副本都不可用, 那么还可以选择OSR ( out-sync replica 消息同步落后超过设置的阈值 ), 但是会存在数据的不一致
分区重新分配