我在学习kafka的时候,学习到副本这一章节,知道了在kafka中,副本分为leader副本和follower副本。然后假如leader副本挂掉了,kafka会快速在follower副本中选取一个副本作为leader副本。
那么我的问题就是:
1、为啥我看网上说follower副本还分为ISR副本和普通副本?这个说法对吗?
2、假如follower副本真的分为分为ISR副本和普通副本,那这里的"普通副本"是指"OSR副本"吗?网上的说法太多,我都不确定“普通副本=OSR副本”这个观点是否正确了,因为我看资料说AR=ISR+OSR
3、对于选举的情况,网上说,kafka会从ISR副本里面选取一个作为leader,如果ISR副本都挂掉了,那就是去普通副本去拿吗?(即OSR副本?)
4、假如所有的副本都挂掉了,拿kafka会怎样做?网上的说法有几种,1:指定新leader为 -1;2、等待ISR中的第一个副本活过来选举为leader;3、等待所有副本中的第一个副本活过来选举为leader。说法都好多呀,但我不知道具体哪个是对的。。
Kafka中的副本是指保存在多个服务器上的同一份数据副本,用于提高Kafka集群的容错性和可用性。每个Topic Partition都有一个leader副本和多个follower副本。leader副本负责所有的读写请求,follower副本只是通过复制leader副本的数据来提供备份和容错功能。
当leader副本宕机时,Kafka需要从follower副本中选择一个新的leader副本来接管该分区的读写请求。此时会进行选举流程,follower副本会向Controller发送自己的副本信息,Controller会选择其中一个follower副本作为新的leader副本,并将该副本信息广播给所有的Broker。选举完成后,所有的follower副本都会成为该分区的ISR(In-Sync Replica),即与leader副本保持同步的副本。
ISR是指与leader副本保持同步的副本集合,也就是说,只有ISR中的副本才能够成为新的leader副本。当follower副本与leader副本的同步滞后时,Kafka会将该副本从ISR中移除,直到该副本与leader副本的同步达到一定程度后再将其添加回ISR中。这样可以保证新的leader副本的数据一定是可靠和一致的。
与ISR相对的是非ISR,也就是与leader副本不同步的副本。非ISR中的副本可能还在与leader副本进行同步,也可能已经停止同步。在非ISR中的副本不会被选为新的leader副本,也不会参与读写请求的处理,只有当它们重新与leader副本进行同步并加入到ISR中后,才能够重新参与到分区的处理中。非ISR的存在可以保证Kafka集群在网络分区等异常情况下仍能够正常工作,但是会影响分区的可用性和数据的一致性。