Zookeeper运行过程与机制剖析

Zookeeper是一个分布式协调服务的开源框架。Zookeeper的层次关系叫Znode,Zookeeper可用来监测Hadoop集群中每个节点的配置文件和状态的变化,Zookeeper可将配置同步到各个节点。Zookeeper可用来做HA。

服务状态

Follower的运行状态包括:LOOKING(当前节点不知道Leader是谁,在搜寻);LEADING(当前节点成为了Leader);FOLLOWING(Leader已经选举出来,非Leader节点跟随,也就是与之同步状态)。

选举制度

选举Leader一般是以zxid的最大者(能力最强者),每个Server都有myid和zxid,先比较zxid,若一样比较myid(肯定不一样),选择较大者。开启时(zxid都一样),一般按myid顺序开启,假如有1,2,3,4,5个,1开启后选自己(初始化内部投票Vote(id,zxid)到内存,zxid是该节点最后一次commit的事务id),发现小于半数,向其他Server发送广播报文(包含自己的mid、zxid和状态stat),发现没有任何响应进入循环等待中,保持LOOKING状态。2开启后选自己同样计算小于半数,发送报文,1收到后比较zxid和myid,发现2较大覆盖原来的Vote,并再次广播出去。此时收到广播的统计是否有过半赞同者,若否继续循环等待,若是则找到Leader切换状态,此例计算结果否,继续LOOKING,3启动后选举广播出去,1和2收到后都比较zxid和myid后选举3并广播报文,重复上面的步骤,自己选举成功,成为Leader(状态改为LEADING),1和2都计算知道了Leader,状态改为FOLLOWING(作为追随者)。4启动后是LOOKING状态广播Vote,因为都有了Leader,其他Server收到后广播自己的Vote不再更改选举,4收到广播后计算就知道了Leader是3,于是作为Follower(FOLLOWING状态)。5同样。

正常通讯中,客户端会向连接的Server发送心跳(TCP长连接),服务端Follower会向Leader发送心跳,如果没有超过一半的Follower保持心跳,则进入选举状态。具体是当一个Follower无法给Leader发送心跳时变为LOOKING状态,开始选举自己,并告知其他Follower,待其他Follower也变为LOOKING时响应选举,过程类似上面的,这里zxid可能不一样了,先比较zxid。如果Leader无法收到超过半数Follower的心跳,则自己开始LOOKING并给其他Server发送选举内容,收到Leader选举的Follower也变为LOOKING,开始选举,下面过程类似。

选举Leader时,如果Follower过多会影响性能(参与选举者多,通讯就多。投票默认走3888端口,数据通信走2888端口),此时可以让一些Learner作为Observer(和Follower的区别是不参与选举,状态是OBSERVING)。

事务处理

读数据比较简单,客户端连接到Leader、Follower和Observer是一样的。写数据时,请求称为事务请求,所有的都会转发到Leader,Leader负责生成zxid(Zookeeper Transaction ID,事务ID)及包含zxid的Proposal(提案),然后把该Proposal广播给所有Learner(包含Follower和Observer),Learner收到Proposal后先写入事务日志,成功后回应ACK(确定)给Leader。当Leader收到过半的ACK后,开始向Learner发送Commit消息,Leader开始将事务日志写入内存,收到Commit的也会将事务日志写入内存。Learner写入内存后更新自己的Commited的zxid。

写数据时,提交的事务和客户端上一次的版本关联,提交的事务发现Znode下的数据版本号已更新,这次客户端提交的事务失败(在你提交前别人修改过了,类似乐观锁)。

客户端连接

客户端连接到Zookeeper时,可连接多个Server,可随机选一个(也可轻量级负载均衡)。连接到一个Server后客户端也会保持这个Server的最新zxid,如果下次尝试连接其他Server,发现zxid不一致会放弃这个Server选择连接其他和客户端zxid一致的Server。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 大数据的学习可以根据自身的需要来决定先学习哪一种技术,如果需要快速构建一个可靠的分布式系统,那么Hadoop可以帮助您实现这一目标;而如果需要构建一个可靠的分布式服务,那么Zookeeper则可以帮助您实现这一目标。因此,学习大数据的先后顺序取决于用户的实际需求。 ### 回答2: 大数据技术中,Hadoop和Zookeeper都是非常重要的组件。Hadoop是一个开源的分布式计算框架,专注于处理大规模数据的存储和处理。Zookeeper是一个分布式协调服务,用于管理和维护分布式系统的一致性和可靠性。 为什么有些人选择先学习Hadoop,再学习Zookeeper呢? 首先,Hadoop作为大数据处理的核心工具之一,主要用于数据的存储和分析。学习Hadoop可以帮助理解大数据的核心概念和处理流程。Hadoop包括了分布式文件系统HDFS和分布式计算框架MapReduce,掌握这些知识对于处理大规模数据非常重要。 其次,学习Hadoop后再学习Zookeeper可以更好地理解分布式系统的原理和运作机制。在Hadoop集群中,Zookeeper用于管理和维护集群的元数据信息,确保分布式系统的一致性和可靠性。掌握Zookeeper有助于更好地理解分布式系统的设计思想和实现原理。 相反,有些人选择先学习Zookeeper,再学习Hadoop的原因可能有以下几点: 首先,可以先了解分布式系统的一致性和可靠性的基本概念和机制Zookeeper作为一个分布式协调服务,可以帮助管理和维护分布式系统的一致性状态。通过学习Zookeeper,可以更好地理解分布式系统的设计原则和实践。 其次,学习Zookeeper后再学习Hadoop可以更好地理解Hadoop集群的管理和运维。在Hadoop集群中,Zookeeper负责管理和维护集群的状态和元数据信息。掌握Zookeeper有助于更好地理解Hadoop集群的运行机制和管理方法。 总之,选择先学习Hadoop还是先学习Zookeeper取决于个人的学习需求和兴趣。无论先学习哪个,掌握Hadoop和Zookeeper都是大数据领域中非常重要的技能。 ### 回答3: 大数据是指数据量庞大、复杂度高、处理速度快的数据集合。在大数据处理中,Hadoop和Zookeeper是两个常用的工具。为什么有的人选择先学Hadoop,后学Zookeeper,而有的人选择先学Zookeeper,后学Hadoop,可以从以下几个方面来解释。 首先,Hadoop是一个用于分布式存储和处理大规模数据的框架。学习Hadoop可以让人们了解并掌握分布式计算的基本概念和技术,掌握并行计算和数据处理的能力。Hadoop提供了分布式文件系统和MapReduce计算模型,可以对大数据进行处理和分析。所以,有的人选择先学Hadoop,可能是因为他们想先掌握大数据处理的基本能力,了解如何使用Hadoop来存储、处理和分析数据。 其次,Zookeeper是一个开源的分布式协调服务,用于管理和维护大规模分布式系统的一致性。学习Zookeeper可以让人们掌握分布式系统的协调和一致性管理的能力,解决分布式系统中的并发、竞争和一致性问题。Zookeeper提供了高可用的分布式协调服务,可以用于在分布式环境中实现同步、配置管理和命名服务等功能。所以,有的人选择先学Zookeeper,可能是因为他们关注分布式系统的协调和一致性问题,希望先掌握分布式系统的基本原理和技术。 最后,个人的背景和需求也会影响学习的顺序。有的人从事数据分析或数据科学相关工作,他们可能更注重数据处理和分析的能力,所以优先选择学习Hadoop。而有的人从事分布式系统的设计和实现工作,他们可能更注重分布式系统的协调和一致性管理的能力,所以优先选择学习Zookeeper。 综上所述,选择先学Hadoop还是Zookeeper取决于个人的需求和兴趣,以及所从事的工作领域。无论选择哪个先学,掌握这两个工具都对于在大数据处理和分布式系统中具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值