目录
问题分析
在Kafka的架构中,一个Topic逻辑主题,可以分成多个Partition分区实现消息内容的物理存储。
同时,为了保证Partition分区的可靠性,Kafka设计了分区副本的概念,也就是一个Partition可以设置多个副本。
在多个副本中,由于设计到数据的同步,所以Kafka针对Partition分区副本集,设置了Leader副本和Follower副本
Leader副本负责处理所有的读写请求,Follower副本,只负责从Leader副本同步数据。
而这个问题,就是去了解候选人对于Partition分区副本集中的Leader选举机制的了解,所以如果希望获得面试官的青睐,至少要回到到具体的点上。
因为在Kafka中,除了Partition分区副本的Leader选举以外,还有Kafka集群本身的Leader选举,这两个不是同一个东西,千万别搞混了。
问题答案
Kafka首先会选择一个具有最新数据的副本作为新的Leader,也就是ISR集合中的副本。
其中,ISR(In-Sync Replica)是指与Leader同步的副本集合,它们的数据同步状态与Leader最接近,并且它们与Leader副本的网络通信延迟最小。
如果ISR集合中没有可用的副本,Kafka会从所有副本中选择一个具有最新数据的副本作为新的Leader。
在这种情况下选举出来的Leader,由于和原来老的Leader节点的数据存在较大的延迟,会造成数据丢失的情况。
所以Kafka设计者把这个功能开关的选择交给了开发者,如果愿意接受这种情况,可以通过unclean.leader.election.enable参数来设置。
开启之后虽然会造成数据丢失,但是至少可以保证依然能对外提供服务,保证了可用性。