Java面试题以及答案--5. Zookeeper

Zookeeper是一个分布式协调服务框架,主要解决分布式系统中的一致性问题。它提供类似文件系统的数据存储,支持节点监听,确保数据的全局一致性。Zookeeper的数据模型包括分层的Znode节点,具有永久和临时节点类型,以及序列化特性。其watch监听机制允许注册并响应节点变化。常见应用场景包括统一命名服务、配置管理、集群管理和分布式锁。在集群中,Zookeeper通过ZAB协议保证数据一致性,并采用半数以上节点存活的机制确保服务高可用。在选举过程中,遵循半数投票原则,通常建议部署奇数台服务器以防止脑裂问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Zookeeper是什么(了解)

Zookeeper 是一个分布式协调服务的开源框架, 主要用来解决分布式集群中应用系统的一致性问题, 例如怎样避免同时操作同一数据造成脏读的问题.
ZooKeeper 本质上是一个分布式的小文件存储系统. 提供基于类似于文件系统的目录树方式的数据存储, 并且可以对树中的节点进行有效管理. 从而用来维护和监控你存储的数据的状态变化. 通过监控这些数据状态的变化,从而可以达到基于数据的集群管理.
在大数据生态系统里,很多组件的命名都是某种动物,比如hadoop就是大象, hive就是蜜蜂, 而Zookeeper就是动物管理员.

2. Zookeeper的数据模型(必会)

 ZK本质上是一个分布式的小文件存储系统.
 ZK表现为一个分层的文件系统目录树结构, 既能存储数据, 而且还能像目录一样有子节点. 每个节点可以存最多1M左右的数据.
 每个节点称做一个Znode, 每个Znode都可以通过其路径唯一标识.
 而且客户端还能给节点添加watch, 也就是监听器, 可以监听节点的变化, 这个功能常在实际开发中作为监听服务器集群机器上下线操作.
在这里插入图片描述

2.1 节点结构

图中的每个节点称为一个 Znode。 每个 Znode 由 3 部分组成:
① stat:此为状态信息, 描述该 Znode 的版本, 权限等信息
② data:与该 Znode 关联的数据
③ children:该 Znode 下的子节点

2.2 节点类型

Znode 有2大类4小类, 两大类分别为永久节点和临时节点.
 永久节点(Persistent): 客户端和服务器端断开连接后,创建的节点不会消失, 只有在客户端执行删除操作的时候, 他们才能被删除.
 临时节点(Ephemeral): 客户端和服务器端断开连接后,创建的节点会被删除.
Znode 还有一个序列化的特性, 这个序列号对于此节点的父节点来说是唯一的, 这样便会记录每个子节点创建的先后顺序. 它的格式为“%10d”(10 位数字, 没有数值的数位用 0 补充, 例如“0000000001”),因此节点可以分为4小类:
 永久节点(Persistent)
 永久_序列化节点(Persistent_Sequential)
 临时节点(Ephemeral)
 临时_序列化节点(Ephemeral_Sequential)

3.Zookeeper的watch监听机制(高薪常问)

 在ZooKeeper中还支持一种watch(监听)机制, 它允许对ZooKeeper注册监听, 当监听的对象发生指定的事件的时候, ZooKeeper就会返回一个通知.
 Watcher 分为以下三个过程:客户端向ZK服务端注册 Watcher、服务端事件发生触发 Watcher、客户端回调 Watcher 得到触发事件情况.
触发事件种类很多,如:节点创建,节点删除,节点改变,子节点改变等。
 Watcher是一次性的. 一旦被触发将会失效. 如果需要反复进行监听就需要反复进行注册.

3.1 监听器原理
在这里插入图片描述
 首先要有一个main()线程
 在main线程中创建Zookeeper客户端, 这时就会创建两个线程, 一个复制网络连接通信(connect), 一个负责监听(listener).
 通过connect线程将注册的监听事件发送给zk, 常见的监听有
监听节点数据的变化get path [watch]
监听节点状态的变化 stat path [watch]
监听子节点增减的变化 ls path [watch]
 将注册的监听事件添加到zk的注册的监听器列表中
 监听到有数据或路径变化, 就会将这个消息发送给listener线程.
 listener线程内部调用了process()方法.此方法是程序员自定义的方法, 里面可以写明监听到事件后做如何的通知操作.

3.2 监听器实际应用

监听器+ZK临时节点能够很好的监听服务器的上线和下线.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值