基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

Znode(数据节点)有几种类型?

知识点图片

Apache ZooKeeper 中的 Znode(数据节点)主要根据 生命周期(Lifecycle)命名方式(Naming) 这两个维度进行分类。

最基础的类型有 4种,但在 ZooKeeper 3.5.x 版本之后,又新增了 2种 特殊类型。

以下是详细分类说明:

一、 基础的 4 种类型

这四种类型是由 PERSISTENT(持久)和 EPHEMERAL(临时)与 SEQUENTIAL(顺序)组合而成的。

1. 持久节点 (Persistent)

  • 特性:这是默认的节点类型。一旦创建,除非客户端主动发起删除请求,否则该节点会一直存在于 ZooKeeper 中。即使创建它的客户端断开连接或 Session 过期,节点也不会消失。
  • 适用场景:存储配置信息、路由信息等静态数据。

2. 临时节点 (Ephemeral)

  • 特性:节点的生命周期与客户端的 Session(会话) 绑定。如果客户端会话失效(如断网、宕机、心跳超时),该节点会被 ZooKeeper 自动删除
  • 重要限制:临时节点不能拥有子节点
  • 适用场景:服务注册与发现(Service Discovery)、检测机器存活状态。

3. 持久顺序节点 (Persistent Sequential)

  • 特性:兼具持久节点的特性,但在创建节点时,ZooKeeper 会自动在节点名后面追加一个单调递增的数字后缀(例如:node-0000000001)。
  • 适用场景:生成全局唯一 ID、分布式队列(记录入队顺序)。

4. 临时顺序节点 (Ephemeral Sequential)

  • 特性:兼具临时节点的特性(Session 断开即删除),同时也会自动追加单调递增的数字后缀。
  • 适用场景分布式锁(这是最经典的应用,如 Curator 框架实现的 InterProcessMutex)、分布式选主(Leader Election,通常编号最小的节点成为 Leader)。

二、 新增的特殊类型 (ZooKeeper 3.5.3+)

为了解决特定场景下的问题,新版本引入了以下类型:

5. 容器节点 (Container Node)

  • 特性:主要用于作为子节点的容器。如果一个容器节点由于删除了最后一个子节点而变为空,ZooKeeper 的后台任务会在未来某个时刻将其删除。
  • 适用场景:防止因业务逻辑遗漏而导致大量空的父节点残留(类似垃圾回收机制)。

6. TTL 节点 (Time To Live Node)

  • 特性:这种节点在创建时可以指定一个过期时间(TTL)。如果该节点在 TTL 时间内没有被修改且没有子节点,它就会被自动删除。
  • 注意:TTL 节点默认是禁用的,需要在系统配置(zookeeper.extendedTypesEnabled=true)中开启。
  • 适用场景:类似于 Redis 的过期键,用于缓存或限时任务。

总结表

类型 生命周期 是否自动编号 断开连接后 能否有子节点
持久 (Persistent) 永久 (直到主动删除) 存在
临时 (Ephemeral) Session 期间 自动删除 不能
持久顺序 永久 存在
临时顺序 Session 期间 自动删除 不能

面试重点提示:
如果面试官问“Znode 有几种”,通常回答 4种 即可,但如果能补充提到 容器节点TTL 节点,会是很好的加分项。同时,务必记住 “临时节点不能有子节点” 这一特性。

00:00
00:00