Broker Controller是由zk选举产生,从多个broker中选举一个作为controller;
patition Leader由controller选出。
每个patition可以有多个副本,但有且仅有一个作为Leader,并且所有的读写操作都在Leader上完成,Follower不提供读操作,只做主备,当Leader宕机时,出来参与选举成为Leader
Leader与Follower为主备关系,不是主从关系
Leader宕机时,Broker Controller从Follower中选取一个新的主作为Leader,选举并不是由zk完成。
Broker Controller选举Patiton的Leader过程:比如有id号为[2,0,1]的ISR列表三个节点,直接顺序从这个列表获取,第一个作为Leader,当Leader宕机后,选取第二个,原有宕机Leader顺序排到最后。
所有Follower都从Leader同步消息
增加或减少patition时:
必定影响消费者的rebalance,生产者如果指定了patition,就不影响,没指定也需要rebalance;
一个patition只能被一个消费者线程消费, 如果只有一个patition,消费者有再多的节点都无用;如果有多个patition可以被一个消费者节点上的多个线程消费,或者被多个消费者消费,主要看patition和消费者数量,消费者数量N,patition数量为M
N<M:存在一个消费者节点上存在多个消费进程,如M=6,N=3,那么通过balance,每个节点上有2个消费线程
N=M:每个节点上有1个消费线程
N>M:M个节点上有1个消费线程,剩余消费节点没有消费线程