kafka leader选举机制

一、概述

kafka中有多个broker,kafka会在所有broker中选出一个controller。controller负责管理整个集群中的分区和副本的状态,其中Partition的Leader选举也是由controller决定。controller会将Leader的改变直接通过RPC的方式通知需为此作出响应的Broker

二、Kafka集群的Leader选举原理

Kafka的Leader选举是通过在zookeeper上创建/controller临时节点来实现leader选举,通过先到先得得原则决定。

所有参与选举的broker在该节点中写入当前broker的信息 ,由于一个节点只能被一个客户端创建成功,创建成功的broker即为leader(controller)。
由于临时节点如果客户端和服务端断开的话,临时节点会被删除。所有当leader和zookeeper失去连接时,临时节点会删除,而其他broker会监听该节点的变化,当节点删除时,其他broker会收到事件通知,重新发起leader选举。

三、分区的leader选举

Kafka会将每个topic分为多个消息分区(partition),这样消息的处理也可以在多个服务器上并行,有利于提供消息处理效率。

同时为了确保高可用,每个分区都会有一定数量的副本(replica)。这样如果有部分服务器不可用,副本所在的服务器就会接替上来,保证应用的持续性。为了提高处理效率,消息的读写都是在固定的一个副本上完成。这个副本就是所谓的Leader,而其他副本则是Follower,Follower会定期地到Leader上同步数据。

如果某个分区所在的服务器除了问题,kafka会从该分区的其他的副本Follower中选择一个作为新的Leader,之后所有的读写就会转移到这个新的Leader上。

Kafka会在Zookeeper上针对每个Topic维护一个称为ISR(in-sync replica 已同步的副本)的集合,该集合中是一些分区的副本。只有当这些副本都跟Leader中的副本同步了之后,kafka才会认为消息已提交,并反馈给消息的生产者。如果某个分区的Leader不可用,Kafka就会从ISR集合中选择一个副本作为新的Leader。

如果所有的ISR都不可用,有两种方法可选

1)等待ISR集合中的副本复活,虽然可以保证一致性,但可能需要很长时间。

2)是选择任何一个立即可用的副本,可能该副本导致数据不一致。

发布了43 篇原创文章 · 获赞 0 · 访问量 3900

猜你喜欢

转载自blog.csdn.net/zhangdx001/article/details/105168329