Zookeeper 基础(一)

本贴最后更新于 473 天前,其中的信息可能已经事过景迁

1.什么是 zookeeper

官方文档上这么解释 zookeeper,它是一个分布式协调框架,是 Apache Hadoop 的一个子项

目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同

步服务、集群管理、分布式应用配置项的管理等。

image.png

2.zeekeeper 核心概念

  • 文件系统数据结构

  • 监听通知机制

    2.1 文件系统数据结构

    每个子目录项都被称作为 ** znode(目录节点)**,和文件系统类似,我们能够自由的增加、删除

znode,在一个 znode 下增加、删除子 znode。

有四种类型的 znode:

  1. PERSISTENT -持久化目录节点
    客户端与 zookeeper 断开连接后,该节点依旧存在
  2. PERSISTENT-SEQUENTIAL -持久化顺序编号目录节点
    持久化目录节点只是 zookeeper 给该节点名称进行顺序编号
  3. EPHEMERL-临时目录节点
    客户端与 zookeeper 断开连接后,该节点被删除
  4. EPHEMERL-SEQUENTIAL 临时顺序编号目录节点
    zookeeper 顺序编号的临时目录节点
  5. container 节点 :3.5.3 版本新增,如果 Container 节点下面没有子节点,则 Container 节点在未来会被 Zookeeper 自动清除,定时任务默认 60s 检查一次

2.2 监听通知机制

  1. 如果注册的是对某个节点的监听,则当这个节点被删除,或者被修改时,对应的客户端将被通知
  2. 如果注册的是对某个目录的监听,则当这个目录有子节点被创建,或者有子节点被删除,对应的客户端将被通知
  3. 如果注册的是对某个目录的递归子节点进行监听,则当这个目录下面的任意子节点有目录结构的变化(有子节点被创建,或被删除)或者根节点有数据变化时,对应的客户端将被通知。

注意:所有的通知都是一次性的,及无论是对节点还是对目录进行的监听,一旦触发,对应的监听即被移除。递归子节点,监听是对所有子节点的,所以,每个子节点下面的事件同样只会被触发一次。

3.zookeeper 经典应用场景

  1. 分布式配置中心
  2. 分布式注册中心
  3. 分布式锁
  4. 分布式队列
  5. 集群选举
  6. 分布式屏障
  7. 发布/订阅

4.zookeeper 常用操作命令

  1. 连接服务
bin/zkCli.sh ‐server ip:port
  1. 创建节点
create [‐s] [‐e] [‐c] [‐t ttl] path [data] [acl]

[zk: localhost:2181(CONNECTED) 0] create -se /simple
Created /simple0000000010
[zk: localhost:2181(CONNECTED) 1] create -se /simple
Created /simple0000000011
[zk: localhost:2181(CONNECTED) 2] create -se /simple
Created /simple0000000012
[zk: localhost:2181(CONNECTED) 3]

--非顺序节点不允许创建相同的节点名称
[zk: localhost:2181(CONNECTED) 5] create -e /goodjob
Created /goodjob
[zk: localhost:2181(CONNECTED) 6] create -e /goodjob
Node already exists: /goodjob
[zk: localhost:2181(CONNECTED) 7]

中括号中为可选项,没有则默认创建持久化节点
-s :顺序节点
-e:临时节点
-c:容器节点
-t:给节点添加过期时间,默认禁用
path:节点路径
data:节点数据
acl:节点 acl 权限

  1. 修改及查看节点
[zk: localhost:2181(CONNECTED) 9] set /goodjob 123
[zk: localhost:2181(CONNECTED) 10] get /goodjob
123
  1. 查看节点状态
[zk: localhost:2181(CONNECTED) 11] stat /goodjob
cZxid = 0x4a
ctime = Fri Aug 25 16:51:36 CST 2023
mZxid = 0x4c
mtime = Fri Aug 25 16:57:34 CST 2023
pZxid = 0x4a
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x1000424341b000c
dataLength = 3
numChildren = 0
  • cZxid 创建 znode 的事务 id
  • mZxid:最后修改 znode 的事务 ID。
  • pZxid:最后添加或删除子节点的事务 ID(子节点列表发生变化才会发生改变)。
  • ctime:znode 创建时间。
  • mtime:znode 最近修改时间。
  • dataVersion:znode 的当前数据版本。
  • cversion:znode 的子节点结果集版本(一个节点的子节点增加、删除都会影响这个版本)。
  • aclVersion:表示对此 znode 的 acl 版本。
  • ephemeralOwner:znode 是临时 znode 时,表示 znode 所有者的 session ID。 如果 znode 不是临时 znode,则该字段设置为零。
  • dataLength:znode 数据字段的长度。
  • numChildren:znode 的子 znode 的数量
  1. 事件监听
//注册监听的同时获取数据
[zk: localhost:2181(CONNECTED) 12] get -w /goodjob
123
[zk: localhost:2181(CONNECTED) 13] set /goodjob 456

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/goodjob

Zookeeper 事件类型:

  • None: 连接建立事件
  • NodeCreated: 节点创建
  • NodeDeleted: 节点删除
  • NodeDataChanged:节点数据变化
  • NodeChildrenChanged:子节点列表变化
  • DataWatchRemoved:节点监听被移除
  • ChildWatchRemoved:子节点监听被移除
  • 分布式
    80 引用 • 149 回帖 • 4 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 14 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...