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:

Kafka的ISR

图片来源:http://blog.****.net/lizhitao/article/details/23744675

3、我们亲自到zookeeper中看一下

首先进入 zookeeper 的bin目录下

./zkCli.sh -server localhost:port

ls /

Kafka的ISR

我们看到了zk中存储了brokers信息

继续 

ls /brokers

Kafka的ISR

 ls /brokers/topics/O2oDubboDeductProviderTopic.paymentSuccess/partitions/0/

Kafka的ISR

 ls /brokers/topics/O2oDubboDeductProviderTopic.paymentSuccess/partitions/0/state

Kafka的ISR