如何处理所有Replica都不工作

发布于 2020-05-19 18:12:59
关注者
0
被浏览
660
1 个回答
  • 面试哥
    面试哥 2020-05-19
    为面试而生,有面试问题,就找面试哥。

      上文提到,在ISR中至少有一个follower时,Kafka可以确保已经commit的数据不丢失,但如果某个Partition的所有Replica都宕机了,就无法保证数据不丢失了。这种情况下有两种可行的方案:

    1.等待ISR中的任一个Replica“活”过来,并且选它作为Leader

    2.选择第一个“活”过来的Replica(不一定是ISR中的)作为Leader

      这就需要在可用性和一致性当中作出一个简单的折衷。如果一定要等待ISR中的Replica“活”过来,那不可用的时间就可能会相对较长。而且如果ISR中的所有Replica都无法“活”过来了,或者数据都丢失了,这个Partition将永远不可用。选择第一个“活”过来的Replica作为Leader,而这个Replica不是ISR中的Replica,那即使它并不保证已经包含了所有已commit的消息,它也会成为Leader而作为consumer的数据源(前文有说明,所有读写都由Leader完成)。Kafka0.8.*使用了第二种方式。根据Kafka的文档,在以后的版本中,Kafka支持用户通过配置选择这两种方式中的一种,从而根据不同的使用场景选择高可用性还是强一致性。 unclean.leader.election.enable 参数决定使用哪种方案,默认是true,采用第二种方案 

    参考:

    1. http://www.jasongj.com/2015/04/24/KafkaColumn2/
    2. http://www.jasongj.com/2015/06/08/KafkaColumn3/
    3. http://orchome.com/22

     

知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看