Kafka 和 Zookeeper 的 Leader 和 Follower 区别(选举&数据同步)

其客户端根据链接的follower不同,可能读取到不同的数据。这是由于副本没有完全同步,存在时间差的原因。由于follower分担了读取数据的压力,zookeeper只要保留全局leader即可,不再进行细分。

如下所示:leader==》读写,follower==>只负责读;

Zookeeper工作方式

》Zookeeper集群包含一个1个Leader,多个Follower

》所有的Follower都可提供读服务

》所有的写操作都会被forward到Leader

》Client与Server通过NIO通信

》全局串行化所有的写操作

》保证同一客户端的指令被FIFO执行

》保证消息通知的FIFO

(2)kafka 不同,只有leader 负责读写,follower只负责备份,如果leader宕机的话,Kafaka动态维护了一个同步状态的副本的集合(a set of in-sync replicas),简称ISR,ISR中有f+1个节点,就可以允许在f个节点down掉的情况下不会丢失消息并正常提供服。ISR的成员是动态的,如果一个节点被淘汰了,当它重新达到“同步中”的状态时,他可以重新加入ISR。因此如果leader宕了,直接从ISR中选择一个follower就行。

kafka在引入Replication之后,同一个Partition可能会有多个Replica,而这时需要在这些Replication之间选出一个Leader,Producer和Consumer只与这个Leader交互,其它Replica作为Follower从Leader中复制数据。因为需要保证同一个Partition的多个Replica之间的数据一致性(其中一个宕机后其它Replica必须要能继续服务并且即不能造成数据重复也不能造成数据丢失)。如果没有一个Leader,所有Replica都可同时读/写数据,那就需要保证多个Replica之间互相(N×N条通路)同步数据,数据的一致性和有序性非常难保证,大大增加了Replication实现的复杂性,同时也增加了出现异常的几率。而引入Leader后,只有Leader负责数据读写,Follower只向Leader顺序Fetch数据(N条通路),系统更加简单且高效。

Kafka:由于kafka的使用场景决定,其读取数据时更关注数据的一致性

从leader读取和写入可以保证所有客户端都得到相同的数据,否则可能存在一些在ISR中注册的节点(replication-factor大于min.insync.replicas),因未来得及更新副本而无法提供的数据。相应的为了规避都从leader上读取带来的资源竞争,可以根据不同topic和不同partition设置不同的leader。

如下所示:leader==>负责读写,follower 负责同步,只负责备份

Zab协议-广播模式

客户端每发送一个更新请求,ZooKeeper都会生成一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序,这个唯一编号就是事务ID(ZXID),只有更新请求才算是事务请求。

为保证按照事务的ZXID先后顺序来处理,Leader服务器会分别为每个Follower服务器创建一个队列,并将事务的先后顺序放入队列中,并按照FIFO的策略进行消息发送。收到需要处理的事务后,Follower服务器会首先以事务日志的形式写入服务器的磁盘中,写入成功后会向Leader服务器发送ACK响应。当Leader服务器收到超过一半的Follower服务器的ACK响应后,会向所有Follower服务器广播Commit消息,收到Commit消息的Follower服务器也会完成对事务的提交。

如果接收到事务请求的是Follower服务器,它会将请求转发给Leader服务器处理。

二、相同点:


**在数据写入过程中,leader与follower都具有相同的先后关系,即数据先写入leader,而后按照一定的规则完成在follower上的最少副本数写入,即可返回调用客户端,该数据写入成功过。

kafka的最少副本数量有min.insync.replicas控制;zookeeper的最少副本数是半数以上节点。

此处的设置都是优先保证可用性,而牺牲一定的数据一致性。**

三、具体的Kafka的leader选举机制如下:


Kafka的Leader是什么

首先Kafka会将接收到的消息分区(partition),每个主题(topic)的消息有不同的分区。这样一方面消息的存储就不会受到单一服务器存储空间大小的限制,另一方面消息的处理也可以在多个服务器上并行。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
338140648)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在KafkaZookeeper中,follower的作用不完全相同。 在Kafka中,follower是负责备份数据的角色。Kafka中的follower节点会从leader节点上复制数据,以实现数据的冗余备份。当leader节点出现故障时,一个follower节点可以被提升为新的leader,以保证服务的可用性。 在Zookeeper中,follower节点并不是备份数据的角色。Zookeeper中的follower节点是用来处理客户端请求的,它们需要与leader节点保持同步,以确保数据的一致性。如果leader节点挂掉,Zookeeper会从follower节点中选举出一个新的leader,以保证系统的正常运行。 因此,虽然KafkaZookeeper中都存在follower节点,但它们的作用是不同的。 ### 回答2: 在KafkaZookeeper中,follower的角色是不同的。 对于Kafka而言,follower是用于备份数据的。Kafka采用分布式的消息系统,数据分布在多个broker中,每个broker可以充当leaderfollowerleader负责接收和处理消息的写入和读取请求,而follower则负责备份leader数据。当leader发生故障或不可用时,follower可以接替成为新的leader,从而保证系统的高可用性和数据的持久性。当leader写入消息后,follower会通过复制机制将数据同步到自己的日志中,以备份leader数据。 而对于Zookeeper来说,follower不是用于备份数据的。Zookeeper是一个高性能的分布式协调服务,用于维护和管理集群状态。Zookeeper的工作原理是基于ZAB(Zookeeper Atomic Broadcast)协议的,其中包含leaderfollower两个角色。leader负责处理客户端的请求,并将结果广播给所有的follower。而follower则负责接收并复制leader的消息,以保证数据的一致性。follower在这里的作用主要是作为leader的备份和支持角色,而不是备份Zookeeper中的具体数据。 综上所述,Kafka中的follower用于备份数据,而Zookeeper中的follower主要是作为leader的备份和支持角色,并不直接备份具体的数据。 ### 回答3: 在KafkaZooKeeper中,follower角色并不是用来进行备份数据的。 在Kafka中,follower用来复制leader的消息副本,以提供数据的冗余和可靠性。Kafka分为多个broker,每个broker可以充当leaderfollower角色。leader是负责接收和处理消息的角色,而follower则是向leader复制消息的角色。同时,Kafka使用了分区(partition)的概念将数据分布到多个broker上,使得消息可以被并行处理。当leader发生故障时,follower会接管成为新的leader,确保系统的可用性和持久性。 而在ZooKeeper中,follower是参与实现一致性协议的角色,用来保持系统的可用性和一致性。ZooKeeper是一个分布式协调服务,用于存储和管理分布式应用程序的配置信息、元数据和状态。ZooKeeper通过选举机制选择一个leader来处理客户端请求,而其他节点则成为follower。当leader发生故障时,follower会通过选举重新选择出一个新的leaderfollower在协助leader完成一致性协议的同时,还会作为备份节点存储数据。 因此,followerKafka中是用来复制消息副本以实现数据冗余和可靠性,而在ZooKeeper中是参与一致性协议的角色,并作为备份节点存储数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值