zookeeper结构

zookeeper的特性

  1. zookeeper:一个leader,多个follower组成的集群
  2. 全局数据一致:每个server保存一份相同的数据副本,client无论连接到呢个server,数据都是一致的
  3. 分布式读写,更新请求转发,由leader实施
  4. 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
  5. 数据更新原子性,一次数据更新要么成功,要么失败
  6. 实时性,在一定时间范围内,client能读到最新数据

zookeeper数据结构

  1. 层次化的目录结构,命名符合常规文件系统规范
  2. 每个及诶单在zookeeper中叫做znode,并且有一个唯一的路径标识
  3. 节点znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点)
  4. 客户端应用可以在节点上设置监听器

数据结构的图

节点类型

1.znode有两种类型:

短暂性(ephemeral)(断开连接自己删除)

持久性(persistent)(断开连接不删除)

2.znode有四种形式的目录节点(默认是persistent)

PERSISTENT

PERSISTENT_SEQUENTIAL(持久序列)

EPHEMERAL

EPHEMERAL_SEQUENTIAL

3.创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,有父节点维护

4.在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

zookeeper命令行操作

  1. 使用ls命令查看当前zookeeper中包含的内容       ls/
  2. 创建一个新的znode,使用create/zk myData。这个命令创建一个新的znode节点“zk”自己与它关联的字符串
  3. 我们运行get命令来确认znode是否包含我们所创建的字符串       get /zk 监听这个节点的变化,当另一个客户端改变/zk时,他会打出下面的

    #WATCHER::

    #WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk                 get /zk watch 为节点添加监听事件

  4. 下面我们通过set命令来对zk锁关联的字符串进行设置       set /zk "asd"

  5. 下面我们将创建的znode删除         delete  /zk -1

  6. 删除节点:rmr          rmr /zk

<think>嗯,用户想了解Zookeeper结构和高频面试题。首先,我需要回忆一下Zookeeper的基本知识。Zookeeper是一个分布式的协调服务,常用于管理配置信息、命名服务、分布式锁等。它的数据结构类似于文件系统的树形结构,每个节点叫做Znode。那结构方面,可能包括数据模型、节点类型、监听机制这些内容。 接下来是高频面试题,常见的可能有Zookeeper的用途,ZAB协议,选举机制,节点类型,Watch机制,如何实现分布式锁,和CAP中的关系等等。需要把这些整理清楚,确保准确无误。 用户可能正在准备面试,所以需要简明扼要的结构化回答,重点突出关键点。同时要注意使用中文,并且按照之前的系统指令,数学表达式要用$...$格式,比如在提到版本号的时候可能需要用$version$这样的表示。不过Zookeeper相关内容可能涉及数学不多,但如果有的话要注意格式。 需要检查是否有遗漏的重要知识点,比如持久节点和临时节点的区别,顺序节点的特性,会话机制,集群角色(Leader/Follower/Observer),数据同步过程,Zookeeper在分布式系统中的应用场景,比如Kafka中使用Zookeeper做什么。 还要注意常见的误区,比如Zookeeper是否强一致性,它保证的是顺序一致性,属于CP系统。这部分在CAP理论中的位置可能会被问到。 现在组织回答的结构:先介绍Zookeeper的总体结构,包括数据模型、节点类型、Watch机制等,然后分点列出高频面试题,每个问题给出简要答案。需要确保信息准确,比如ZAB协议的正确描述,选举过程的细节,比如myid和ZXID的作用。 可能还需要对比其他协调服务,比如etcd,但用户没有问这个,所以可能不需要展开。但面试题中可能会涉及为什么选择Zookeeper,所以可以提及其稳定性和成熟度。 最后检查是否有错误,比如节点类型是否包括持久、临时、顺序,以及它们的组合。监听机制是一次性的还是可持续的,需要明确说明是一次触发后需重新注册。 总结,回答需要结构清晰,知识点全面,符合面试准备的需求,同时遵循格式要求,正确使用LaTeX标注变量或术语。</think>### Zookeeper核心结构 Zookeeper采用**树形层级命名空间**(类似文件系统),核心组件包括: 1. **Znode** - 数据存储单元,路径唯一(如`/app/config`) - 存储数据上限:**1MB** - 关键属性: ```math version(版本号), cZxid(创建事务ID), mtime(修改时间) ``` 2. **节点类型** | 类型 | 特性 | 示例用途 | |---|---|---| | 持久节点(Persistent) | 客户端断开后保留 | 配置存储 | | 临时节点(Ephemeral) | 客户端会话结束自动删除 | 服务注册 | | 顺序节点(Sequential) | 路径末尾追加全局单调递增序号 | 分布式锁 | 3. **Watch机制** - 一次性触发(数据变化后需重新注册) - 监听事件类型:`NodeCreated`、`NodeDeleted`、`NodeDataChanged` --- ### 高频面试题(附答案要点) #### 1. Zookeeper如何保证数据一致性? - **ZAB协议**(Zookeeper Atomic Broadcast) - **Leader选举**:基于`myid`(服务器ID)和`ZXID`(事务ID)的过半机制 - **消息广播**:Leader将事务请求转化为`Proposal`广播,Follower返回`ACK`后提交 #### 2. 临时节点的典型应用场景? - **服务注册发现**:服务上线创建临时节点,宕机后节点自动清除 - **分布式锁**:通过竞争创建临时节点实现互斥 #### 3. Zookeeper的Watch机制是否可靠? - **弱可靠性**:客户端断开期间的事件无法捕获(需结合心跳检测重连后主动拉取数据) #### 4. 如何用Zookeeper实现分布式锁? ```plaintext 1. 尝试创建临时顺序节点:/lock/resource_00000001 2. 检查自己是否是最小序号节点 3. 是则获取锁;否则监听前一个节点的删除事件 4. 释放锁时删除自身节点 ``` #### 5. Zookeeper属于CAP中的哪一类? - **CP系统**:保证强一致性(Consistency)和分区容错性(Partition Tolerance),牺牲可用性(如选举期间服务不可用) --- ### 扩展考点 - **集群角色**:Leader处理写请求,Follower/Observer处理读请求 - **会话(Session)**:心跳超时(默认2倍tickTime)后会话失效 - **典型应用**:Hadoop(HA切换)、Kafka(Broker元数据管理) > 💡 提示:面试中常要求结合场景设计Znode结构(如配置中心、选主逻辑),建议通过开源框架(如Dubbo)源码加深理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值