zookeeper学习笔记2(小D课堂)

news2024/11/15 21:34:11

zookeeper数据模型:

 我们的zookeeper是以节点的形式存在的,这样的形式和数据结构中的树的形式很像。同时也很像我们的linux的结构,例如linux的/user/local目录下可以有我们的/usr/local/tomcat目录。这样的节点形式。

我们的zookeeper中的每一个节点都称之为我们的zNode。另外我们的zookeeper中包含我们的acl属性,acl是我们学习zookeeper中特别重要的一个内容,它是我们的权限,我们可以给zookeeper节点设置相应的权限。另外我们zookeeper包含两个节点类型:永久节点和临时节点。

zookeeper常用命令之zkCli:

这里我们先来说一点,我们上次笔记是直接就启动了zookeeper,但是实际上我们应该先切到我们的用户,然后再去启动我们的zookeeper:

 接着我们再进入到我们的zookeeper的bin目录中去:

 然后我们去启动我们的zookeeper:

然后我们就来学我们的zkCli脚本:

 

./zkCli.sh h

 

我们用这个命令可以打开我们的帮助文档:

 我们知道我们的zookeeper是一个节点的形式。/usr/local。

那么我们怎么去在zookeeper里去创建一个节点呢?

 我们文档里的这句话就是我们创建节点的方式:

-s是我们的顺序节点,-e是我们的临时节点,path是我们的路径,data是我们节点中存放的数据,acl是权限(我们这里暂时用不到)。

我们直接这样就可以启动我们虚拟机中的zkCli.

 

我们这样就创建了我们的一个有序节点。

 我们的路径必须要带/,不然会报错。

然后我们再去创建一个节点:

我们可以获取我们节点的子节点:

ls path

 我们现在来查看一下节点里的数据:

 get path

我们还可以查看到节点的状态:

 stat path

那么这些信息都是什么含义呢?

查看获取节点的子节点以及当前的状态:

ls2 path

我们这里没有创建子节点,所以我们查看不到我们的子节点。

 我们现在就来创建一下我们的子节点:

然后我们再去查一下:

 

 我们就可以看到包含我们的一个子节点wiggin。

修改节点的数据 set path data[version]:

这是我们原来节点里的数据:

 

然后我们再去查看:

 

我们的数据就发生了改变了。

 我们这里修改了之后,我们的dataVersion就+1了。

那我们语法中的version是干什么的呢?

如果我们自己定义的版本和我们的dataVersion不一样,那么我们就无法设置成功。

如果我们设置的版本和我们的dataVersion一样:

 

我们的dataVersion就自增了。

 

这就是我们最后的值了。

然后我们去看看怎么去删除一个节点:

 delete path[version] | rmr path

我们发现因为我们这个节点下是有我们的根节点的,所以我们无法直接使用delete语句进行删除。

 

我们使用rmr 递归删除就可以成功删除了。

 那我们到这里就结束了。我们的zookeeper zkCli语句基本上就是我们的对节点的增删改查操作。

深入理解zookeeper的session机制:

 

我们可以看到这里是有一个节点的。

那么我们按住ctrl+C去强制退出一下:

再去打开我们的zookeeper,那我们的这个节点还会存在么?

 

我们发现这个节点还存在,这是什么原因呢?

 这是因为心跳机制还没有过期。

那么我们退出以后等比较长的一段时间看一下呢?

如果我们的服务端长期没有收到我们的客户端,那么它会认为我们的客户端死亡了。

我们现在再去登录看一下:

就会没有了。

我们再把它创建出来。

我们也可以强制断开使用close命令:

深入理解zookeeper watcher机制

watcher主要是监控节点的变更。

我们现在没有任何节点。

现在我们来创建一个节点:

不带任何修饰,我们这里创建的就是我们永久的节点。

 

我们可以这样去查看到它的状态。

 然后我们打开另一个终端:

我们在这个终端中去变更这个节点的数据:

 

我们的另一个终端马上开启了watch。

 

我们第二次变更发现,没有再次触发我们的watcher。在zookeeper中watcher是不会重复使用的。

get和state可以去对所有节点进行watch。

 我们还有一个针对子节点的。

那我们先来去创建一个子节点:

 然后我们在另一个终端去变更这个子节点:

 

我们发现这边并没有什么作用。也就是说get和state不会针对我们的子节点。

 

现在我们使用这个命令。

再去变更子节点:

 

我们发现ls和ls2针对于子节点的数据变化是不会触发watch事件的。

对于增加和删除会触发watch事件。

那么我们现在来去创建一个子节点:

 

 

马上就开启了我们的watch事件。

 然后我们再去创建一个子节点的子节点:

 

 这时候没有触发watch。也就是说只有针对直接子节点会触发watch,对于子节点的子节点是不会去触发的。

 

zookeeper的acl权限控制:

 

 

现在我们创建了一个新的节点。

 

 我们可以这样查看到权限。

但是它显示的信息是什么意思呢?

 

 

我们去设置它的权限,发现我们还没有注册这个用户。

那么我们来去增加一个用户:

 

然后我们再去设置它的权限:

 

我们再去查看一下它的权限:

 

 

如果 我们在另一个终端直接去访问,是访问不到的。

我们就要去获取权限:

 我们现在来更改一下它的权限:

 

 然后现在我们给它去创建一个子节点:

 

我们可以看到它里面包含一个子节点。

 

我们直接删除的话肯定是没有权限的。

我们现在来获取权限:

 

显示我们还是不能删除。

 因为这个用户是没有删除权限的。

现在我们给它增加了一个删除权限。

 

这样我们就可以正常去删除了。

 

这节课为止,我们关于zookeeper的一些基本的节点操作就掌握了。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/133188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法练习-常用查找算法复现

一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2023.1.1 Last edited: 2023.1.1 目录 算法练习-常用查找算法复现(PS:1 -- 3自己写的,4、5懒得写了&#xf…

PHP开发者之路

我们经常会发现,历时四年软件专业的大学生毕业居然找不到工作,即便找到了工作也只能是做一些简单的辅助性工作。 那么我们不禁要问,究竟是什么原因让我们可爱的大学生们学而无用,或者用而不学呢? 我认为主要是因为现…

三角形年份aabb3n+1近似计算阶乘之和数据统计水仙花数韩信点兵倒三角形子序列的和分数化小数排列蛇形填数sprintf竖式问题

目录 P16_习题1-6_三角形 P16_习题1-7_年份 P20_eg2-1_aabb 为什么是int n a*1100 b*11 为什么要将向下取整? P22_eg2-2_3n1问题 P24_eg2-3_近似计算 P25_eg2-4_阶乘之和 P27_eg2-5_数据统计 P34_习题2-1_水仙花数 P34_习题2-2_韩信点兵 P34_习题2-3_倒…

Fragment全文详解(由浅入深_源码分析)

相信android开发者们一定或多或少的用过Fragment,但是对于其更深层次的原理我猜可能大部分应该都没有了解过,今天这里就由浅入深,整体对Fragment做一个全面解析。 基础介绍 Fragment是什么以及为什么要有Fragment呢? Fragment直…

长沙烟火气回来了,颐而康客流回暖为什么这么快?

随着一大批阳康的人们走出家门,长沙这座消费之城也逐步恢复了往日的活力。车多起来了、路堵起来了、线下店铺恢复营业了、长沙的烟火气息又回来了。 在颐而康万家丽西子店的大厅里,等候休息区已经坐满了顾客,他们有的在等待,有的…

Centos6从零开始安装mysql和tomcat后台环境,并成功部署Tomcat项目

最近因为搞定了一些环境的搭建因为项目过于老旧的缘故我从centosstream9一直改换7一直到6都没有成功一直到改成6.5的32位版本才算是成功搭建完成所以特地来写一篇文章记录一下。 首先我的liunx使用版本是 centos6.5 32位 java版本:jdkCentos6从零开始安装mysql和tom…

7-6 整除光棍

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定…

【Kuangbin数论】阿拉丁和飞毯

4577. 阿拉丁和飞毯 - AcWing题库 题意&#xff1a; 思路&#xff1a; 就是去求x和y 使得 1.x!y 2.x*ya 3.min(x,y)b 一开始想的是去根号n地枚举a的约数 &#xff0c;然后直接统计 但是这样肯定T&#xff0c;所以换成dfs枚举约数去了 但是也T了 首先a*a<b的话直接特…

前端 | 手把手教你装饰你的github profile(github 首页)

1.创建存储库 您可以创建一个与您的 github 帐户名同名的存储库 添加README文件 2.编辑README.md 现在&#xff0c;可以根据自己的喜好修改 repo 中的自述文件&#xff0c;但我在考虑包含哪些信息时查看了其他开发人员的资料。通常包括简短的介绍、使用的技术堆栈和联系方式…

Buildroot编译hisi平台根文件系统

Buildroot编译hisi平台根文件系统 文章目录1. 下载Buildroot源码2. Menuconfig配置3. 编译Buildroot3.1 手动下载软件包3.2 kernel header 报错3.3 arm-hisiv300-linux-gcc-ar&#xff1a;cannot find plugin liblto_plugin.so3.4 /media/data/hisi/buildroot-2022.02.8/output…

C++类的多种构造函数

目录默认构造函数普通构造函数拷贝构造函数转换构造函数移动构造函数举例两个场景下面以Complex 复数类来学习C类中的各种构造函数; #include <iostream> using namespace std;//复数类 class Complex{friend ostream & operator<<(ostream &out, Complex…

2022年终结——人生中最美好的一站

文章目录前言回顾2022工作上学习上投资上生活上展望2023工作学习投资生活总结有一种责任与压力&#xff0c;叫做上有老下有小&#xff0c;但有一种幸福也叫做上有老下有小&#xff0c;当你遭遇挫折与困难时&#xff0c;这些“老小”以及那个同龄的“她”是你坚实的后盾&#xf…

Redisson中的“琐事”

文章目录前言锁分类Redisson可重入锁&#xff08;Reentrant Lock&#xff09;公平锁&#xff08;Fair Lock&#xff09;联锁&#xff08;MultiLock&#xff09;红锁&#xff08;RedLock&#xff09;读写锁&#xff08;ReadWriteLock&#xff09;信号量&#xff08;Semaphore&am…

【C++】左值、右值、语义移动和完美转发

右值引入的目的是为了对象移动&#xff1a; 因为在很多情况下&#xff0c;对象拷贝会经常发生&#xff0c;但是很多对象在拷贝后就直接被销毁了。这对性能是一个很大损耗。在重新分配内存的时候&#xff0c;从旧的内存将元素拷贝到新的内存中是不必要的。更好的方法是移动元素。…

论文投稿指南——中文核心期刊推荐(天文、测绘学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

使用Kalibr问题汇总:ModuleNotFoundError: No module named ‘wx‘

问题1&#xff1a; 报错&#xff1a;/kalibr_ws/src/Kalibr/Schweizer-Messer/sm_python/python/sm/PlotCollection.py", line 4, in import wx ModuleNotFoundError: No module named ‘wx’ 解决&#xff1a; sudo apt-get install python3-wxgtk4.0问题2&#xff1…

MySQL补齐函数LPAD和RPAD之SQLite解决方案

工作中经常需要对数据进行清洗&#xff0c;并对个别字段进行格式化处理&#xff0c;像 字符串左右补齐。MySQL数据库自带有LPAD()、RPAD()&#xff0c;而SQLite数据库没有的相应函数&#xff0c;需要自己转换。 目录 1、MySQL数据库 1.1、MySQL左右补全函数 1.2、实践验证 …

阶段性回顾(5)与一些题目实例(数组合并,有序判断,删除元素,进制问题等)

tips 1. 内存栈区的使用习惯是先使用高地址&#xff0c;再使用低地址。并且你还要清楚&#xff1a;随着数组下标的增大&#xff0c;其元素的地址也是在不断变高&#xff1b;对于一个占多个内存单元的变量进行取地址&#xff0c;取出来的是其所占内存空间最低地址的内存单元的地…

Python内存机制 -- = 赋值操作

Python内存机制 python的万物皆对象可不只是说说而已。 1. 预备知识&#xff1a; id()&#xff1a;可以将id()理解为C语言中的*&#xff0c;其返回当前对象在内存中的地址。 int p id(object) # id函数返回对象object在其生命周期内位于内存中的地址&#xff0c;id函数的参数…

Python数据分析案例18——化学分子数据模型(机器学习分类问题全流程)

1. 引言 1.1设计背景 对分子进行分类&#xff0c;对于筛选特定疾病的候选药物是至关重要的。传统的机器学习算法可以对分子进行分类&#xff0c;但是分子不能直接作为机器学习模型的输入&#xff0c;需要进行大量的实验从分子中得到一系列的分子特性。将分子特征使用数字化进…