ZooKeeper面试深度解析:高级题目与答案

需积分: 5 0 下载量 65 浏览量 更新于2024-08-03 收藏 7KB MD 举报
"ZooKeeper面试题及答案解析" ZooKeeper是一款分布式的协调服务,广泛应用于分布式系统中,如Hadoop、HBase等。它提供了诸如命名服务、配置管理、集群同步、分布式锁等功能。以下是对ZooKeeper面试题的详细解答: ### 1、ZooKeeper的几种部署方式? ZooKeeper的部署方式主要有三种: 1. **单机模式**:适用于开发环境,只有一个ZooKeeper实例运行,不提供高可用性。 2. **伪集群模式**:在一个节点上启动多个ZooKeeper实例,每个实例使用不同的配置文件,包括不同的端口,看起来像一个集群,但其实还是单点故障。 3. **集群模式**:多台机器上分别部署ZooKeeper实例,形成真正的集群,能够容忍部分节点故障,提供高可用性和容错性。 ### 2、发布订阅的两种设计模式? ZooKeeper支持两种发布订阅模式: 1. **推(Push)**:在ZooKeeper中,服务端可以主动将数据更新推送给已经注册了Watcher的客户端。当数据节点发生变化时,服务端会主动发送一个Watcher事件通知给客户端。 2. **拉(Pull)**:客户端主动发起请求,向服务端获取最新的数据。这种方式更加灵活,但需要客户端定时或在特定条件下去轮询数据。 ### 3、服务端处理Watcher的实现过程 1. **接收与存储**:服务端接收到客户端的请求,如果请求包含Watcher注册,那么会将数据节点路径和ServerCnxn(客户端和服务端的连接,实现了Watcher接口)存储在`WatchTable`和`watch2Paths`中。 2. **事件触发**:例如,当有`setData()`操作导致节点数据改变时,服务端会创建一个`WatchedEvent`对象,包含通知状态(如`SyncConnected`)、事件类型(如`NodeDataChanged`)和节点路径。 3. **查找并触发Watcher**:从`WatchTable`中根据节点路径查找并提取相应的Watcher,然后从表中移除,因为Watcher在服务端是一次性的,触发后即失效。 4. **发送通知**:通过ServerCnxn对应的TCP连接,调用process方法发送Watcher事件通知给客户端。 ### 4、ZooKeeper节点宕机的处理 Zookeeper集群设计的核心目标是高可用性。当Zookeeper节点宕机时: 1. 如果是**Follower宕机**,由于集群中还有其他Follower和Leader,服务不会中断,数据也不会丢失,因为ZooKeeper的数据有多个副本。 2. 如果是**Leader宕机**,集群会进行Leader选举,选择新的Leader继续提供服务。选举过程中,可能会有一段时间的服务暂停。 3. **集群容错**:Zookeeper集群要求至少有半数以上的节点正常工作。例如,3节点集群能容忍1个节点故障,2个节点集群不能容忍任何节点故障。只有当集群中正常工作的节点少于半数时,整个集群才会失效。 ZooKeeper的这些特性使其成为分布式系统中重要的组件,确保了服务的稳定性和数据的一致性。理解和掌握ZooKeeper的这些核心概念和技术对于在面试中脱颖而出至关重要。