请问下4个kafka的副本以及选举问题,有专家回答下

我在学习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。说法都好多呀,但我不知道具体哪个是对的。。

关于ISR副本和普通副本:
    ISR副本(In-Sync Replica):指与Leader副本保持同步的Follower副本。ISR副本是当前可用且保持与Leader副本同步的副本集合。
    非ISR副本(Out-of-Sync Replica,OSR副本):指与Leader副本不同步或者不可用的Follower副本。非ISR副本可能由于网络延迟或副本故障而与Leader副本不同步。

"普通副本"通常指的是非ISR副本(OSR副本)。因此,普通副本不属于ISR副本集合,可能与Leader副本存在一定的数据差异。

当ISR副本中的所有副本都不可用时,Kafka将从非ISR副本(OSR副本)中选取一个作为新的Leader副本。这种情况下,非ISR副本将成为新的Leader副本,并开始处理数据请求。

如果所有副本(包括ISR副本和OSR副本)都不可用,Kafka将无法提供服务。在这种情况下,你可以根据需求选择适当的处理方式。一种可能的方法是等待所有副本恢复,并从第一个副本中选取一个作为新的Leader副本。另一种方法是根据业务需求手动指定新的Leader副本。

需要注意的是,Kafka的具体行为和策略可能在不同的版本中有所不同。因此,最好参考官方文档或特定版本的文档以获取准确的信息。

那我就一序号依次回答你的问题好了

  1. 是的,follower副本确实分为ISR副本和非ISR副本。ISR副本是指处于同步状态的副本(即与leader副本保持连接,并且能够及时同步来自leader的消息的副本),而非ISR副本则是指处于异步状态或失去连接的副本。由于只有ISR副本才能够保证数据的一致性,因此Kafka只从ISR副本中选取leader副本,而忽略非ISR副本。
  2. 普通副本和OSR副本是不同的概念。普通副本指的是除leader副本和ISR副本之外的所有副本,而OSR副本则是指非ISR副本中“落后”或滞后于ISR副本的那些副本(即与leader的同步滞后程度超出预设阈值的副本),通常情况下这些副本是不可用的。
  3. 如果ISR副本都挂掉了,则Kafka会从所有副本中选取一个健康可用的副本作为leader副本。这个选举过程中,Kafka并不会区分OSR副本和普通副本,只要有一个副本与ZooKeeper服务器保持连接并且在预设的时间段内未超时,则可以被选为leader副本。
  4. 如果所有副本都挂掉了,则Kafka会等待有副本重新上线,并从中选取一个进行leader副本选举。具体来说,Kafka首先会从ZooKeeper服务器中查找符合要求的副本,并将其标记为为ISR副本;如果没有符合要求的副本,则会从所有可用的副本中选取一个作为leader副本,并将其加入到ISR副本列表中,以确保数据的一致性。如果没有任何副本可用,则Kafka将无法恢复,需要手动进行恢复。