上文我们讲了分区分成Leader 和 Follower两种角色,当Leader宕机后,会从ISR同步副本中选出一个分区作为leader分区继续工作,那么leader是怎么选出来的呢?
怎么从ISR中选出的Leader呢? Leader选举机制
比如有这么个分布情况,如下图
- 分区P1 有3个副本,1 leader+2 follower,ISR是 0、1 ,OSR是2
- 分区P2 有3个副本,1 leader+2 follower,ISR是 1、2,OSR是0
- 分区P3 有3个副本,1 leader+2 follower,ISR是 0、1、2,OSR是空
场景:
运行过程中P1 的Leader宕机了,那么直接从ISR中选出P1的Follower成为新的leader,如下图:
我们可以看到Kakfa通过维护ISR动态列表来保证副本选举,只要leader挂掉了,就从ISR中随机
选举一台作为leader,ISR利用率更高,只要ISR列表还有一个副本存活就可以继续提供服务
那如果ISR 全都挂掉了怎么办呢?OSR能不能用呢,也能,就是会造成数据丢失
可以通过参数unclean .leader.election.enable=true
即当ISR都不可用了可以从OSR中选举leader