卡夫卡的领袖是什么
首先卡夫卡会将接收到的消息分区(分区),每个主题(主题)的消息有不同的分区。这样一方面消息的存储就不会受到单一服务器存储空间大小的限制
,另一方面消息的处理也可以在多个服务器上并行。
其次为了保证高可用,每个分区都会有一定数量的副本(复制品)。这样如果有部分服务器不可用,副本所在的服务器就会接替上来,保证应用的持续性。
但是,为了保证较高的处理效率,消息的读写都是在固定的一个副本上完成
。这个副本就是所谓的领导者,而其他副本则是跟随者。而跟随者则会定期地到领导上同步数据。
领导人选举
如果某个分区所在的服务器除了问题,不可用,卡夫卡会从该分区的其他的副本中选择一个作为新的
负责人。之后所有的读写就会转移到这个新的
领导上。现在的问题是应当选择哪个作为新的Leader。显然,只有那些跟Leader保持同步的Follower才应该被选作作的领导者
.Kafka会在Zookeeper上针对每个主题维护一个称为ISR(同步复制品,已同步的副本)的集合,该集合中是一些分区的副本。只有当这些副本都跟领导者中的副本同步了之后,卡夫卡才会认为消息已提交,并反馈给消息的生产者。如果这个集合有增减,卡夫卡会更新饲养员上的记录。
如果某个分区的负责人不可用,卡夫卡就会从ISR集合中选择一个副本作为新的负责人。
显然通过ISR,卡夫卡需要的冗余度较低,可以容忍的失败数比较高。假设某个主题有F + 1个副本,卡夫卡可以容忍˚F个服务器不可用。
为什么不用少数服从多数的方法
服从少数的英文多数一种比较常见的一致性算法
状语从句:组长选举法它的含义是只有超过半数的副本同步了
,系统才会认为数据已同步;选择领导时也是从超过半数的同步的副本中选择
。这种算法需要较高的冗余度譬如只允许一台机器失败
,需要有三个副本;而如果只容忍两台机器失败,则需要五个副本而卡夫卡的ISR集合方法,分别只需要两个和三个副本。
如果所有的ISR副本都失败了怎么办
此时有两种方法可选,一种是等待ISR集合中的副本复活,一种是选择任何一个立即可用的副本
,而这个副本不一定是在ISR集合中。这两种方法各有利弊,实际生产中按需选择。
如果要等待ISR副本复活,虽然可以保证一致性,但可能需要很长时间。而如果选择立即可用的副本,则很可能该副本并不一致。