Kafka高可用
Replica、Leader和Follower
- Replica: Kafka集群中的一个副本,可以是Leader副本或者是Follow副本中的一个。每个分区都有多个副本,其中一个副本是Leader副本,其余是Follow副本。每个副本都保存了分区的完整数据,用于保证数据的可靠性和高可用性
- Leader:负责该分区的所有读写请求,也是唯一可以向分区写入数据的副本,它将写入的数据同步到所有的Follow副本
- Follow:不能直接向分区写入数据,只能从Leader副本中复制数据,并同步到本地。当Leader副本挂掉的时候,会从所有Follow副本中选择一个作为新的Leader副本
AR、ISR、OSR
- AR(Assigned Replica):分区的所有副本,包括Leader副本和所有Follow副本
- ISR(In-Sync Replica):与Leader副本保持同步的所有副本(Leader副本也属于ISR),即它们已经复制了Leader副本中的所有数据,并且与Leader副本数据的差值不超过一定阈值(Follow副本能够落后于Leader副本的最长时间间隔)。并且ISR副本集合是动态变化的,不是一成不变的。除非开启了Unclean选举,不然只有处于ISR集合中的Follow副本才能被选举成新的Leader副本
- OSR(Out-of-Sync Replica):与Leader副本不同步的所有副本,与Leader副本的差异超过了一定的阈值,或者还没有复制Leader副本中的所有数据
分区副本什么情况下会从ISR踢出
与Leader副本的差异超过了一定的阈值,默认时间阈值是10s
分区副本ISR为空怎么办
可以通过unclean选举配置参数(unclean.leader.election)来决定是否从OSR中选举出leader;
如果该参数是true,允许OSR成为leader,但是OSR信息滞后,可能出现消息丢失的情况
分区副本之间同步,是推模式还是拉模式
同步的时候是Follow副本去主动拉取消息,优点是副本机器可以根据自身的负载情况去拉取
Kafka高可用机制是如何实现的
Kafka天然支持多副本机制,每个副本都有完整的数据,这些副本分散在不同的Broker上,就算Leader挂掉了,还有Follow副本可以保证数据的完整性
Kafka是如何为分片选择主副本的
Kafka维护了一个ISR副本集合,ISR副本集合中的副本都是完整数据,当没有Leader或者原有的Leader挂掉了,会从ISR集合中选择一个副本升级为Leader
Kafka怎么知道Leader挂掉了
Broker会选出一个作为Controller,负责监考Leader的状态,这样Leader挂掉后Controller就能感知到,并从ISR中选择出一个新的Leader
- 那么Controller是如何选举的?
所有的Broker会尝试在Zookeeper中创建数据/controller,先创建成功的就是Controller。
注意,这是一个临时数据,如果当前的Controller挂掉或者网络掉线,这个数据就会消失。其他Broker通过Watch感知到这件事后就会再次抢写
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 cloud_fly blog!