ZooKeeper基础

2023-11-11

ZooKeeper重要概念解读

Data model(数据模型)

ZooKeeper数据模型采用层次化的多叉树型结构,每个节点上都可以存储数据,这些数据可以是数字,字符串或者是二进制序列。并且,每个节点还可以拥有N个子节点,最上层是根节点以“/”来代表。每个数字节点在ZooKeeper中被成为znode,他是ZooKeeper中数据的最小单位。并且,每个znode都一个唯一的路径标识。

强调一句:ZooKeeper主要是用来协调服务的,而不是用来存储业务数据的,所以不要放比较大的数据在znode上,ZooKeeper给出的上线是每个节点的数据大小最大是1M。

从下图可以更直观地看出:ZooKeeper节点路径标识方式和Unix文件系统路径非常相似,都是由一系列使用斜杠“/”进行分割的路径表示,开发人员可以向这个节点中写入数据,也可以在节点下面创建子节点。
在这里插入图片描述

znode(数据节点)

介绍了ZooKeeper树形数据模型之后,我们知道每个数据节点在ZooKeeper中被称为znode,它是ZooKeeper中数据的最小单位。你要存放的数据就放在上面,是你使用ZooKeeper过程中经常需要接触到的一个概念。

znode 4种类型

我们通过是将znode分为4大类:

  • 持久 (PERSISTENT)节点:一旦创建就一直存在即使ZooKeeper集群宕机,直到将其删除。
  • 临时 (EPHEMERAL)节点:临时节点的生命周期是与客户端会话(session)绑定的,会话消失则节点消失。并且,临时节点只能做叶子节点,不能创建子节点。
  • 持久顺序 (PERSISTENT_SEQUENTIAL)节点:除了具有持久节点的特性之外,子节点的名称还具有顺序性。比如 /node1/app01, /node1/app02。
  • 临时顺序 (PERSISTENT_SEQUENTIAL)节点:除了具有临时节点的特性之外,子节点的名称还具有顺序性。

znode数据结构

每个znode由2部分组成

  • stat:状态信息
  • data:节点存放的数据具体内容
    如下所示,通过get命令来获取根目录下的dubbo节点内容。
[zk: 127.0.0.1:2181(CONNECTED) 6] get /dubbo
# 该数据节点关联的数据内容为空
null
# 下面是该数据节点的一些状态信息,其实就是 Stat 对象的格式化输出
cZxid = 0x2
ctime = Tue Nov 27 11:05:34 CST 2018
mZxid = 0x2
mtime = Tue Nov 27 11:05:34 CST 2018
pZxid = 0x3
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

Stat类中包含一个数据节点的所有状态信息的字段,包括事务ID-cZxid、节点创建时间-ctime和子节点个数-numChildren等等。
看下每个znode状态信息代表什么:

znode状态信息 解释
cZxid create ZXID,即该数据节点被创建时的事务id
ctime create time,即该节点的创建时间
mZxid modified ZXID,即该节点最终一次更新时的事务id
mtime modified time,即该节点最后一次更新时间
pZxid 该节点的子节点列表最后一次修改的事务id,只有子节点列表变更才会更新pZid,子节点内容变更不会更新
cversion 子节点版本号,当前节点的子节点每次变化时值增加1
dataVersion 数据节点内容版本号,节点创建时为0,每更新一次节点内容(不管内容有无变化)该版本号的值增加1
aclVersion 节点的ACL版本号,表示该节点ACL信息变更次数
ephemeralOwner 创建该临时节点的会话的sessionId;如果当前节点为持久节点,则ephemeralOwner=0
dataLength 数据节点内容长度
numChildren 当前节点的子节点个数

版本version

对应于每个znode,ZooKeeper都会为其维护一个叫做Stat的数据结构,Stat中记录这个znode的三个相关版本:

  • dataVersion当前znode节点版本号
  • cversion:当前znode子节点版本
  • aclVersion:当前znode的ACL版本

ACL(权限控制)

ZooKeeper采用ACL(AccessControlLists)策略来进行权限控制,类似与UNIX文件系统的权限控制。
对于znode操作权限,ZooKeeper提供了一下5种:

  • CREATE:能创建子节点
  • READ:能获取节点数据和列出其子节点
  • WRITE:能设置/更新节点数据
  • DELETE:能删除子节点
  • ADMIN:能设置节点ACL权限
    其中尤其需要注意的是,CREATE和DELETE这两种权限都是针对子节点的权限控制。
    对于身份认证,提供了以下几种方式:
  • world:默认方式,所有用户都可无条件访问
  • auth:不使用任何id,代表任何已认证的用户
  • digest:用户名:密码认证方式:username:password
  • ip:对指定ip进行限制。

Watcher(事件监听器)

Watcher(事件监听器),是ZooKeeper中一个很重要的特性。ZooKeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件出发的时候,ZooKeeper服务端会将事件通知到感兴趣的客户端上去,该机制是ZooKeeper实现分布式协调服务的重要特性。
在这里插入图片描述

会话(session)

Session可以看作是ZooKeeper服务器与客户端之间的一个TCP长连接,通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向ZooKeeper服务器发送请求并接受响应,同时还能够通过该连接接受来自服务器的Watcher事件通知。

Session有一个属性叫做:SessionTimeOut,SessionTimeOut代表会话的超时时间。当由于服务器压力太大、网络故障或是客户端主动断开连接等各种原因导致客户端连接断开时,只要在SessionTimeOut规定事件内能够重新连接上集群中任意一台服务器,那么之前创建的会话任然有效。

另外,在为客户端创建会话之前,服务端首先会为每个客户端都分配一个SessionID。由于SessionID是Zookeeper会话的一个重要标识,许多与会话相关的运行机制都是基于这个SessionID的,因此,无论是哪台服务器为客户端分配的SessionID,都务必保证全局唯一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ZooKeeper基础 的相关文章

  • netpoll浅析

    netpoll只是一种框架和一些接口 只有依赖这个框架和接口实现的netpoll实例 netpoll才能发挥它的功能 类似于kernel中的vfs vfs本身并不会去做具体的文件操作 只是为不同的文件系统提供了一个框架 netpoll不依赖

随机推荐

  • 理解编程中的while循环(C/C++)

    固定的语法结构 省略 include 和 using int main printf x 我们写这个代码 打了一个int main 然后打了一个大括号 为什么要这样做 这个main 是一个函数 但为什么一定要叫main 为什么又需要打 又需
  • JS中的递归

    1 什么是递归 如果一个函数在内部可以调用其本身 那么这个函数就是递归函数 简单理解 函数内部自己调用自己 这个函数就是递归函数 比如 但上面代码报错因为递归很容易发生 栈溢出 错误 stack 所以必须要加退出条件 return 递归必须
  • python读取csv文件内容,并保存到数据库中

    coding utf 8 python读取csv文件内容 并保存到数据库中 import csv import time import pymysql import emoji num 0 file path r H 20221103174
  • 快速掌握 Android Studio 中 Gradle 的使用方法

    Gradle是可以用于Android开发的新一代的 Build System 也是 Android Studio默认的build工具 Gradle脚本是基于一种JVM语言 Groovy 再加上DSL 领域特定语言 组成的 因为Groovy是
  • 81. Search in Rotated Sorted Array II

    31 Search in Rotated Sorted Array ll 描述不包含相同的元素情况 Input nums 4 5 6 7 0 1 2 target 0 Output 4 对有序数组进行一定的旋转 进行查找 二分查找and双指
  • VMware player桥接模式不能联网的解决方法

    VMware虚拟机下主要使用两种网络连接方式 桥接模式 NAT模式 桥接模式 直接连接网络 虚拟机独立IP 并与宿主机处于同一网段内 相当于虚拟机是局域网内独立的一台电脑 使用起来较为方便 NAT模式 网络地址转换 借由宿主机的IP访问网络
  • linux进程间的通信(详细且有demo)

    目录 1 进程间通信常用的几种方式 2 无名管道 1 管道的概念 2 管道的原理 3 管道的局限性 4 创建匿名管道 5 demo 6 父子进程使用管道通信 7 管道的读写行为 8 查看管道缓冲区大小 3 有名管道 1 特点 2使用场景 3
  • VsCode中书写markdown文档快速插入图片

    文章目录 安装插件 插入图片 效果预览 安装插件 搜索 markdown image 安装这个插件 插入图片 首先复制图片 将图片保存在剪贴板中 在需要插入的地址点击鼠标右键 选择粘贴图片 粘贴图片后 会在文件 根路径 下生成一个 imag
  • redis内存数据库C客户端hiredis API 中文说明

    A 编译安装 make make install usr local make install PREFIX HOME progs 可以自由指定安装路径 B 同步的API接口 redisContext redisConnect const
  • 二十一、java版 SpringCloud分布式微服务云架构之Java 继承

    继承的概念 继承是java面向对象编程技术的一块基石 因为它允许创建分等级层次的类 继承就是子类继承父类的特征和行为 使得子类对象 实例 具有父类的实例域和方法 或子类从父类继承方法 使得子类具有父类相同的行为 生活中的继承 兔子和羊属于食
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • python库之execjs使用方法

    一 execjs使用方法 import execjs def encrypt c1 c2 with open encrypt js encoding utf 8 as f jscode f read txt execjs compile j
  • Vmware vSphere 5.0系列教程之五 存储简介及配置openfiler存储

    转载至 http andygao blog 51cto com 323260 822152 从前面的vSwitch 我们知道 vSphere的高级功能的实现 必须通过多片物理网卡来实现 不过 这仅仅是一方面 更重要的是 我们需要独立的共享存
  • Flink学习6-自定义分区器介绍

    背景说明 我们都知道自定义source是可以自定义并行度的 数据读写有几个并行度就意味着有几个分区 那么怎么控制我想要的数据流入到指定分区呢 flink1 12官方文档给我们提供了一下几种方式 接下来我们分别进行讨论 partitionCu
  • C#开发(1) 判断字符串是否为GUID的函数

    bool IsGuid string strToValidate private bool IsGuid string strToValidate bool isGuid false string strRegexPatten 0 1 0
  • 个人收藏的网页特效应用(电脑新建一个文本文档复制粘贴改后缀名为.html就能用)

    1 樱花
  • 设置浏览器不能登录http://burp

    文章目录 前言 一 浏览器能登录http burp 二 设置 三 浏览器不能登录http burp 前言 设置浏览器不能登录http burp 一 浏览器能登录http burp 二 设置 Proxy gt Option gt Miscel
  • 【Rust日报】2023-04-05 基于 Rust 的 DNS 客户端、服务器和解析器 trust-dns

    基于 Rust 的 DNS 客户端 服务器和解析器 trust dns trust dns 的目标是构建具有现代功能的安全可靠的 DNS 服务器和客户端 仅使用安全的 Rust 构建 并通过适当的错误处理避免所有恐慌 其功能设计在一定程度上
  • Spring AOP与拦截器的区别

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 作用层面 拦截器只对action负责 作用层面一般位于Controller层 Spring AOP主要是拦截对Spring管理的Bean的访问 一般作用与Service
  • ZooKeeper基础

    目录 ZooKeeper重要概念解读 Data model 数据模型 znode 数据节点 znode 4种类型 znode数据结构 版本version ACL 权限控制 Watcher 事件监听器 会话 session ZooKeeper