Kafka基本知识二 replication和elect new leader

来源:互联网 发布:vb for循环退出 编辑:程序博客网 时间:2024/06/04 00:41

kafka读写都在一个leader, 所有的replication同步leader的LOG,并在zookeeper里面维护in-sync状态。 一个follower在in-sync列表里面有2个要求,第一和zookeeper有连接,第二必须是up-to-date,其实就是和leader的数据不能相差太远,有一个参数可以控制阀值。leader写如的数据,只要同步到了follower,并且这个follower是活着的,就意味着数据不会丢失。

那么当leader因为硬件问题crash了,如何选取新的leader呢? kafka没有使用传统的投票方式,而是采用选取in-sync列表里面有最新数据的那个follower, 那么问题又来了,如果有多个follower都具有相同数据,那么怎么选? 原理上,这些follower都可以选为new leader,官方文档好像对此并没有描述,仅仅是说这些follower都可以作为 new leader.

还有另外一种情况,如果所有的follower都crash了,leader也crash,此时会是怎样一种情形? 很显然在没有新leader之前,partition不可使用,kafka提供2种方式:


1. 等待in-sync列表里面的follower重新回到列表,并选取一个作为leader

2. 选取随便一个活着的follower,即使它不在in-sync 列表里面,

为了尽快的恢复服务,kafka默认选取第二种方式,除非 unclean.leader.election.enable 被关闭,也就是必须要求 in-sync列表里面的follower才能做为新的 leader。

上面还有问题没有解决,就是多个follower都有资格作为new leader的情况下, kafka到底是怎么处理的,目前官方文档没有给出任何解释。

原创粉丝点击