Kafka中的Broker选主与副本同步机制

Kafka中哪里需要选主:

  • Kafka集群中存在多个Broker,需要选举一个当家的Broker;
  • Kafka每个Partition可以有多个副本,需要选举一个当家的副本;Leader副本处理Partition的所有读写请求并维护自身和Follower副本的状态信息,如LEO、HW

 

名词解释:

  • 控制器:在启动Kafka集群时,每个代理(Broker)都会实例化并启动一个KafkaController,并将该代理的brokerId注册到Zookeeper的相应节点中。Kafka集群中各代理会根据选举机制选出其中一个代理作为Leader,即Leader控制器,当Leader控制器宕机后其他代理再次竞选出新的控制器。控制器作用:负责主题的创建与删除、分区和副本的管理以及代理故障转移处理等。
  • HW(HighWatermark):consumer能够看到的此partition的位置,即消费者能消费到的消息,消费者可见的消息,这个涉及到多副本的概念,取一个partition对应的ISR中最小的LEO作为HW,consumer最多只能消费到HW所在的位置。
  • LEO(LogEndOffset):表示每个partition的log最后一条Message的位置。

 

控制器选举流程:leaderId = -1代表还没有成功选举出leader

Kafka中的Broker选主与副本同步机制

 

副本同步机制:

Kafka中的Broker选主与副本同步机制

Kafka中的Broker选主与副本同步机制

如上图,分区test-0有三个副本,每个副本的LEO就是自己最后一条消息的offset。可以看到最小的LEO是Replica2的,等于3,也就是说HW=3。这代表offset=4的消息还没有被所有副本复制,是无法被消费的。而offset<=3的数据已经被所有副本复制,是可以被消费的。