百度百科
ZooKeeper是一个 分布式,开放源码 的 分布式应用程序协调服务,是Google的Chubby一个开源的实现,是 Hadoop 和 Hbase 的重要组件。(大数据组件之一)
它是一个 为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
官网:
https://zookeeper.apache.org/index.html
默认端口号:2181
名字由来
zookeeper,翻译为 动物园管理员。因为很多服务都是以动物命名,创建者想到作为协调服务,就称之为 zookeeper
应用场景
- hadoop大数据生态
- 统一命名服务(注册中心)
- 统一配置管理(配置中心)
- 集群管理
统一命名服务(注册中心)
大型应用通常会按业务拆分成一个个 若干个业务子系统,这些子系统,往往会 访问一些公用的子系统,比如:推送消息服务,短信验证等。
传统方式,业务子系统需要知道 推送消息服务 的 ip 和 port,但ip地址对人不友好,不方便记忆
推送消息服务 将自己 注册到 zookeeper(类似服务有:eureka、nacos),并给自己起个名字(相当于域名),其他业务子系统可通过该名字访问
统一配置管理(配置中心)
大型应用通常会按业务拆分成 若干个业务子系统,这些子系统需要各种各样的配置,如:session超时配置,数据库信息等
为了缓解访问压力,在部署时,某些子系统可能要部署几十个服务,如果把 session超时配置、数据库信息 配置 在各子系统中,一旦发生变更,在大型互联网应用中,这工作量是非常恐怖的
使用zookeeper后,将 session超时配置、数据库信息 配置到zookeeper中,业务子系统从zookeeper中获取这些配置
集群管理
为了缓解 公用子系统的压力,以集群方式进行部署,当压力大时,会动态增加数量,当压力小时,会动态减少数量
业务子系统如何才能知道 动态增加或减少 的 推送消息服务 的 ip 和 port?
业务子系统需要 将自己 注册到 zookeeper(类似服务有:eureka、nacos),然后从zookeeper 获取 可用的 推送消息服务 的 ip 和 port
特点
Zookeeper 本身就是一个分布式服务:一个领导者(Leader),多个跟随者(Follower)组成的集群。
集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。(所以集群数多为奇数)
全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
顺序一致性: 从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。
原子性: 所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。
单一系统映像 : 无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。
可靠性: 一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。
哪些软件依赖zookeeper
Dubbo、kafka、hbase
同类软件
- nacos
- consul
- Eureka(停止更新)

