千家信息网

分布式利器Zookeeper(一)

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Zookeeper不论是在实际项目中,还是在各种分布式开源项目中都得到了广泛应用,从本篇博客开始,将为大家带来我对Zookeeper的认识。这个系列将会涵盖Zookeeper的介绍、环境搭建、配置说明
千家信息网最后更新 2026年11月02日分布式利器Zookeeper(一)

Zookeeper不论是在实际项目中,还是在各种分布式开源项目中都得到了广泛应用,从本篇博客开始,将为大家带来我对Zookeeper的认识。这个系列将会涵盖Zookeeper的介绍、环境搭建、配置说明、Java操作Zookeeper(原生API方式)、zkclient操作Zookeeper方式、Zookeeper的典型应用场景分析以及Curator框架等。

Hello,Zookeeper

Zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)实现。ZK能够很好的保证分布式环境下的数据一致性,这一特性使得ZK是处理分布式一致性问题的利器!这个利器有哪些特性呢,看看下面你就了解了。

可靠性:一旦Zookeeper成功的应用了一个事务,并完成对client的响应,那么Zookeeper内部集群的所有服务器的状态都会是一致的保留下来。

单一视图:由于上面可靠性的保证,使得无论client连接的是ZK集群中的哪个服务器,所看到的数据都是一致的。

顺序一致性:从一个client发起的请求,最终会严格的按照发起的顺序被应用到Zookeeper中去。【实质上,ZK会对每一个client的每一个请求,进行编号,说白了,就是分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序。】

实时性:通常意义下的实时性是指一旦事务被成功应用,那么client会立刻从服务器端获取到变更后的新数据。ZK仅仅能够保证在一定时间内,client最终一定会能从服务器上获取到最新的数据。

高可用:在ZK集群内部,会有一个Leader,多个Follower。一旦Leader挂掉,那么ZK会通过Paxos算法选举出新的Leader,只要ZK集群内部的服务器有一半以上正常工作,那么ZK就能对外正常提供服务!

简单的数据结构:类似于Linux文件系统的树形结构,简单,实用!(树形层次空间)

高性能:性能有多高呢,举个栗子,比如我们经常通过创建临时节点来处理分布式锁,要知道临时节点是存储在内存中的,在读场景压力测试下,QPS高达10W+!也就是说ZK在读场景下,性能非常突出!


初步认识Zookeeper的数据模型


每一个节点被称为znode,znode可以有子节点目录,并且每个znode可以存储数据(特别需要注意的是临时节点不可以有子节点)

znode如果是临时节点,意味着创建这个znode的client一旦与ZK集群失去联系,这个临时的znode将被自动删除。(事实上,client与ZK通信是采用长连接方式,并通过心跳的方式保持连接,这种状态就是session,一旦session失效,就是连接断开,临时节点会被删除掉)

znode是可以被监控的,不论是znode本身的数据变化,还是该znode下的子节点的变化,都可以进行监控,这也是ZK的核心特性。(很多应用场景就是基于这个特性,后续进行详细介绍)


初步认识Zookeeper的角色组成


这里,我们先了解下ZK Server的身份特性:

Leader:负责客户端的write类型的请求

Follower:负责客户端的read类型请求,并可以参与Leader的选举

watcher:后文介绍。


install Zookeeper

这里以zookeeper-3.4.5版本为例,搭建一个ZK集群(至少要求3个节点,并且各个ZK SERVER之间系统时间保持一致)。使用的机器列表是:192.168.99.121、192.168.99.122、192.168.99.123。

以192.168.99.121为例进行说明:






配置说明:

tickTime:ZK集群与客户端、ZK集群内部SERVER之间的心跳间隔,默认2S。

initLimit:在客户端连接ZK集群时,可以忍受多少个心跳次数。上述的配置表明,如果client初始连接ZK集群,在10*2S=20S内ZK集群没有返回连接成功,即意味着连接失败。

syncLimit:表示ZK集群内部Leader和Follower之间请求应答可以忍受多少个心跳次数。

dataDir:ZK保存数据以及日志的目录。

clientPort:ZK集群对外暴露的接口,即client访问ZK集群的端口(2181)。

server.x = IP:port-a:port-b

X表示是第几号服务器,从0开始编号,并和dataDir下的myid文件对应。

port-a表示Leader和Follower进行信息通信的端口(2888)。

port-b表示Follower进行选举的端口(3888)。






基本的ZK命令


通过zkCli.sh进入客户端进行操作:

查找ls、创建znode节点create(注意每个节点都是有值的)、获取get、设置set。

我们观察下下面几个属性:

ctime和cZxid是一对,表示创建ZNODE的时间和事件编号;

mtime和mZxid是一对,表示修改ZNODE数据内容的时间和事件编号;(通过set指令会改变这2个属性,但是该节点的子节点的变化不会影响该节点)

dataVersion:表示ZNODE数据的版本,注意利用JAVA 原生API进行delete ZNODE时,需要提供version才可以删除ZNODE。(当然我们可以提供-1来跳过版本检查机制)

dataLength、numChildren都好理解。

另外,注意rmr指令可以递归删除ZNODE;而delete只可以删除指定ZNODE。


ZooInspector工具及IntelliJ IDEA与ZK集成


ZooInspector是一个可运行的JAR,运行后直接连接ZK集群中的任何一个SERVER即可。




OK,到这里,一切准备工作就准备就绪了~

咱们下期来看JAVA操作ZK(基于Zookeeper的原生API)、分布式锁探讨、Watch特性等~


节点 集群 数据 服务 分布式 一致 服务器 特性 应用 客户 场景 就是 方式 时间 成功 一致性 之间 事务 客户端 版本 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网和科技技术 互联网科技未来 互联网科技金融 唐信互联网科技 贷财互联网科技 天津摩尔互联网科技 互联网科技上市公司 互联网科技视频素材 互联网科技股午盘股票涨跌 厦门比较好的科技互联网公司 互联网软件和科技 彤创互联网科技有限公司 岳阳华臻互联网科技有限公司 工业互联网山东科技大学 国大互联网教育科技有限公司薪资 云南省自由互联网科技有限公司 互联网科技包装股份有限公司上市 广州三三互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 互联网 科技节活动 微视频大赛 北京互联网科技 奇酷互联网络科技 科技与互联网的利与弊 互联网科技中介 随着互联网科技发展 武汉健翔互联网络科技有限公司 中国互联网十大科技股排名 互联网金融科技名词解释 南通创西澳互联网科技有限公司 唐山双旺合互联网科技产业园
0