Kafka的ISR
众所周知,kafka中一个topic可以分为多个Partition,每个partition又有多个副本,
对于每个topic的partition而言,有一个leader副本,其余的都是follower,
leader负责读与写,follower同步leader的数据。
当leader挂掉的时候,由controller主持在剩余follower中选举出一个leader
但是这个剩余follower有一个条件,就是follower必须在ISR列表中
ISR (IN-SYNC Replication) 维护了与leader信息一致的follower的信息
当leader挂掉的时候 就从这个ISR中选举
那么问题来了,这个ISR是由leader维护,leader挂了ISR怎么办呢?
没有关系,ZK中存储了这个ISR!
证据1:
Kafka集群的一些重要信息都记录在ZK中,比如集群的所有代理节点、主题的所有分区、分区的副本信息(副本集(AR)、主副本(leader)、同步的副本集(ISR))。外部事件会更新ZK的数据,ZK中的数据一旦发生变化,控制器都要做出不同的相应处理。
-----《 Kafka技术内幕:图文详解Kafka源码设计与实现》
证据2:
图片来源:http://blog.****.net/lizhitao/article/details/23744675
3、我们亲自到zookeeper中看一下
首先进入 zookeeper 的bin目录下
./zkCli.sh -server localhost:port
ls /
我们看到了zk中存储了brokers信息
继续
ls /brokers
ls /brokers/topics/O2oDubboDeductProviderTopic.paymentSuccess/partitions/0/
ls /brokers/topics/O2oDubboDeductProviderTopic.paymentSuccess/partitions/0/state