Zookeeper总结

news2024/9/26 1:15:19

目录

1、概念

2、什么是Zookeeper

3、如何下载

4、部署运行

        4.1、解压文件

        4.2、修改配置文件

        4.3、创建持久化目录

        4.4、配置jdk

        4.5、启动zookeeper服务

        4.6、查看zookeeper运行状态

5、系统模型

        5.1、数据模型(文件系统)

        5.2、znode节点类型

                持久节点

                持久顺序节点

                临时节点

                临时顺序节点

        5.3、客户端操作命令

1、查看节点

2、新增节点

3、获取节点数据

4、设置节点数据

5、删除节点(无子节点)

        5.4、监听机制

6、apache的curator操作zookeeper

6.1、添加依赖

6.2、创建会话并连接

6.3、操作命令

        创建节点

        获取节点的值

        获取节点的所有子节点

        修改节点

        删除节点(无子节点)

        递归删除节点(有子节点)

        监听机制


部分图片来自百战尚学堂

1、概念

ZooKeeper是一个开放源代码的分布式协调服务ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

说明:

Zookeeper顾名思义就是动物园管理员。 因为Hadoop生态各个项目都是动物得图标。 所以很符合管理员得形象。

2、什么是Zookeeper

Zookeeper是文件系统+监听机制

3、如何下载

点击下面的链接,进入apache官网即可下载zookeeper的tar包

Apache ZooKeeper

4、部署运行

        4.1、解压文件

 通过第三步的链接下载好zookeeper的tar包后,通过将zookeeper的tar包拉入虚拟机中

 通过tar -zxvf 包名 -C zookeeper 将文件夹取名为zookeeper安装到当前目录中

        4.2、修改配置文件

 zookeeper在conf目录中提供了一个参考的配置类名为zoo_sample.cfg,但是zookeeper加载的配置类名为zoo.cfg,所以我们可以创建一个副本或者直接将zoo_sanple.cfg改名为zoo.cfg

mv zoo_sample.cfg zoo.cfg

然后我们需要修改一下zoo.cfg目录

在目录中添加这两段代码,这两段代码的意思就是配置zookeeper运行过后产生的文件存放到dataDir指定的路径中,产生的日志存放到dataLogDir指定的路径中

dataDir=/usr/local/zookeeper/apache-zookeeper-3.8.1-bin/zkdata
dataLogDir=/usr/local/zookeeper/apache-zookeeper-3.8.1-bin/zklogs

        4.3、创建持久化目录

通过以下命令创建目录

mkdir zkdata
mkdir zklogs

        4.4、配置jdk

因为zookeeper是通过java编写的,所以zookeeper在运行的时候是需要jdk的环境变量的,通过以下命令配置jdk环境变量,既然配置了jdk的环境变量那么顺便把zookeeper的环境变量一起配置了吧(我的linux系统中jdk已经下好了,如果大家还没有下载jdk的可以前往oracle官网下载)

1、编辑配置类

vim /etc/profile

2、在配置类中添加以下语句

 大家根据自己的文件名修改配置,JAVA_HOME对应的就是jdk的文件名,ZOOKEEPER_HOME对应的即使zookeeper的文件名

export JAVA_HOME=/usr/local/jdk/jdk-11.0.17
export ZOOKEEPER_HOME=/usr/local/zookeeper/apache-zookeeper-3.8.1-bin
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin

 3、生成环境变量

source /etc/profile

        4.5、启动zookeeper服务

 因为我们已经配置好了zookeeper的环境变量此时我们就可以不需要进入bin目录才能使用zookeeper。

通过以下命令启动zookeeper服务 

zkServer.sh start

        4.6、查看zookeeper运行状态

 启动好zookeeper之后是这样的

此时我们可以通过以下代码查看zookeeper的运行状态 

zkServer.sh status

5、系统模型

        5.1、数据模型(文件系统)

在Zookeeper中,可以说 Zookeeper中的所有存储的数据是由znode组成的,节点也称为 znode,并以 key/value 形式存储数据。

介绍:

整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头。

保存数据

注意:

以 key/value 形式存储数据。key就是znode的节点路径,比如 /java , /server。

        5.2、znode节点类型

ZooKeeper 节点是有生命周期的,这取决于节点的类型。节点类型可以分为持久节点、临时节点,以及时序节点,具体在节点创建过程中,一般是组合使用,可以生成以下 4 种节点类型。

                持久节点

持久节点是zookeeper中最常见的一种节点类型。所谓持久节点,是指改数据节点被创建后,就会一直存在与zookeeper服务器上,直到有删除操作来主动清除这个节点。

                持久顺序节点

这类节点的基本特性和上面的节点类型是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。

示例:

/java00000000000001  spring

/baizhan00000000000001  itbaizhan

                临时节点

  • 从名称上可以看出该节点的一个最重要的特性就是临时性。
  • 所谓临时性是指,如果将节点创建为临时节点,那么该节点数据不会一直存储在 ZooKeeper 服务器上。

区别:

和持久节点不同的是,临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意,这里提到的是会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。

                临时顺序节点

临时顺序节点的基本特性和临时节点是一致的,同样是在临时节点的基础上,添加了顺序的特性。

示例:

/baizhan0000000000000001  itbaizhan

/baizhan0000000000000002  itbaizhan

/baizhan0000000000000003  itbaizhan

        5.3、客户端操作命令

首先运行一下代码进入zookeeper客户端

zkCli.sh

进入客户端之后是这样的

1、查看节点

通过ls /查看根路径下有哪些文件 

2、新增节点

通过create /文件名 文件值创建节点

3、获取节点数据

通过get /文件名获取文件中的数据

4、设置节点数据

通过set /文件名 文件值设置节点数据

5、删除节点(无子节点)

通过delete /文件名 删除节点(如果该节点下面有子节点那么需要先删除子节点再删除父节点)

        5.4、监听机制

监听节点的变化

ls -w path

通过该命令监听节点的变化,不是值的变化。

示例:

此时如果我们删除该节点即会提示 

监听节点的值的变化

get -w path

watch监听机制只能够使用一次,如果下次想要使用,必须重新监听,就比如ls path watch命令,只能监听节点路径的改变一次,如果还想监听,那么需要再执行一次ls path watch命令。

 示例:

此时如果我们修改节点里面的值即会提示

6、apache的curator操作zookeeper

Curator是 Netflix公司开源的一套ZooKeeper客户端框架。和ZkClient一样,Curator解决了很多ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和 NodeExistsException异常等,目前已经成为了Apache的顶级项目,是全世界范围内使用最广泛的ZooKeeper客户端之一。

Curator包

  • curator-framework:对zookeeper的底层api的一些封装。
  • curator-client:提供一些客户端的操作,例如重试策略等。
  • curator-recipes:封装了一些高级特性,如:Cache事件监听、选举、分布式锁、分布式计数器、分布式Barrier等。

6.1、添加依赖

<dependency>
   <groupId>org.apache.curator</groupId>
   <artifactId>curator-recipes</artifactId>
   <version>4.2.0</version>
</dependency>

6.2、创建会话并连接

        //创建会话
        String add = "地址:2181";//多个地址用逗号隔开
        CuratorFramework cur = CuratorFrameworkFactory
                .builder()
                .connectionTimeoutMs(1000)//连接超时时间
                .connectString(add)//连接地址
                .retryPolicy(new ExponentialBackoffRetry(1000, 3))//连接超时重试
                .build();

        //连接
        cur.start();

6.3、操作命令

        创建节点

//创建节点
//withMode()设置节点类型
//forPath()设置节点key和value
cur.create().withMode(CreateMode.PERSISTENT).forPath("/node2","node2".getBytes());

        获取节点的值

        //获取节点数据
        byte[] bytes = cur.getData().forPath("/node2");
        System.out.println(new String(bytes));

        获取节点的所有子节点

1、获取节点的子节点
//getChildren()获取所有子节点
//forPath()获取谁的子节点
List<String> child = cur.getChildren().forPath("/node2");
for(Stringc:child){
	System.out.println(c);
}

        修改节点

1、设置节点数据
//setData()根据key设置value
//forPath()提供key和value
cur.setData().forPath("/node2","helloworld!".getBytes());

        删除节点(无子节点)

1、删除节点
//delete()根据key删除节点
//forPath()提供key
cur.delete().forPath("/node2");

        递归删除节点(有子节点)

1、删除节点时,该节点有子节点,此时需要递归删除
//delete()删除节点
//deletingChildrenIfNeeded()递归删除节点
//forPath()提供删除节点的key
cur.delete().deletingChildrenIfNeeded().forPath("/node2");

        监听机制

1、监听机制(可以监听无数次)

//NodeCache监听对象
//getListenable().addListener()添加监听机制,并设置如何监听
//start()开启监听
NodeCache cache=new NodeCache(cur,"/node2");
cache.getListenable().addListener(()->{
	System.out.println("被修改了...");
});
cache.start();

Thread.sleep(Long.MAX_VALUE);

        

        

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

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

相关文章

Google FLASH-QUAD Transformer模型的设计雷点

这个模型用来做无序弱监督分类&#xff0c;效果好&#xff0c;特别是收敛速度比标准多头Attention层快多了&#xff0c;完全没得比。 问题1 但这模型我用来做自回归生成&#xff0c;非常垃圾。 同时尝试了 GPT 和 T5 这两种模型结构的设计&#xff0c;明明Loss正常下降&#…

环境变量相关知识

目录 目录 谢谢你的阅读&#xff0c;这是对我最大的鼓舞 先说结论&#xff1a; 开始论述&#xff1a; 让我们举个例子 相关指令 创建本地变量 创建环境变量 方法一&#xff1a; 方法二&#xff1a; 删除环境变量 子进程中也有环境变量 第一种&#xff1a; 第二种 …

【PlumGPT】与PlumGPT开启智能对话之旅

文章目录 一、前言二、PlumGPT介绍篇三、PlumGPT登录篇四、PlumGPT体验篇1、与PlumGPT聊天2、让PlumGPT翻译3、让PlumGPT创作4、请PlumGPT写推荐信5、让PlumGPT展示图片6、让PlumGPT充当百科小助手 五、PlumGPT总结篇 PlumGPT入口体验链接&#xff1a;https://plumgpt.com 一、…

【Kubernetes】 故障转移和自愈能力机制详解

文章目录一. 引言1. 介绍Kubernetes2. 故障转移和自愈能力的重要性二. Kubernetes 概览1. Kubernetes 架构2. Kubernetes 组件和功能三. 故障转移1. 如何定义故障转移2. Kubernetes 中的故障转移机制2.1 健康检查2.2 Pod 和 ReplicaSet2.3 控制器和故障转移3. Pods和ReplicaSet…

LS1028+TSN+Vxworks实时系统解决方案

TSN&#xff08;时间敏感网络&#xff09;正在各类市场兴起。它可以为过去不曾存在的全新应用提供实时通信。 例如&#xff0c;将控制功能从驱动中解耦出来并移至边缘计算。下一代自动控制器可以并行处理视频流和控制流等各种工作负载&#xff0c;在一台机器上运行全部深度学习…

【高危】Google Chrome V8 类型混淆漏洞(CVE-2023-2033)

漏洞描述 Google Chrome V8是Google开源的JavaScript和WebAssembly引擎&#xff0c;被用在Chrome和Node.js等浏览器和平台中。 该项目受影响版本存在类型混淆漏洞&#xff0c;攻击者可通过诱导用户打开恶意链接来触发此漏洞&#xff0c;可能导致浏览器崩溃或执行任意代码。由…

跟姥爷深度学习2 TensorFlow的基本用法

一、前言 前面我们浅用TensorFlow做了个天气预测&#xff0c;虽然效果不咋样&#xff0c;但算是将整个流程跑通了。这一篇我们在之前基础上对TensorFlow的一些参数进行简单介绍&#xff0c;在接口文件的基础上了解各参数的简单含义和用法。 二、再次构建模型 我们先将之前的…

基于组合双向拍卖的共享储能机制研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

规模化敏捷框架之LeSS

Scrum 是目前比较流行的敏捷框架&#xff0c;Scrum 敏捷开发团队由产品负责人&#xff08;Product Owner&#xff09;、敏捷教练&#xff08;Scrum Master&#xff09;、软件开发人员和其他合作人员组成。团队在这个指导框架下协同工作、开发、创造和交付有价值的产品来解决复杂…

易基因:METTL3介导的m6A甲基化谱调控肌肉干细胞成肌细胞状态转换|发育分化

2020年9月29日&#xff0c;《Cell Death Discovery》&#xff08;IF: 7.109&#xff09;杂志发表了题为“A defined N6-methyladenosine (m6A) profile conferred by METTL3 regulates muscle stem cell/myoblast state transitions”的研究论文&#xff0c;研究通过MeRIP-seq&…

静态时序分析Static Timing Analysis2——建立时间和保持时间的时序检查

文章目录前言一、建立时间检查1、寄存器到寄存器2、输入端口到寄存器3、寄存器到输出端口4、输入端口到输出端口二、保持时间检查1、寄存器到寄存器2、输入端口到寄存器3、寄存器到输出端口4、输入端口到输出端口前言 2023.4.11 继续学习STA&#xff0c;前面听的感觉好迷糊&am…

Android---性能优化之图片压缩

质量压缩 质量压缩会用到 Bitmap.compress()。 public boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream); 这个方法有三个参数&#xff1a; Bitmap.CompressFormat format&#xff1a;图像的压缩格式&#xff08;jpeg ,png, webp&#xf…

C++STL大全----容器篇(上)

&#xff08;一&#xff09;概念 STL&#xff0c;英文全称 standard template library&#xff0c;中文可译为标准模板库或者泛型库&#xff0c;其包含有大量的模板类和模板函数&#xff0c;是 C 提供的一个基础模板的集合&#xff0c;用于完成诸如输入/输出、数学计算等功能。…

数据库第一个实验

啦啦啦啦啦&#xff0c;数据库终于要实验了&#xff0c;很担心做不好&#xff0c;要是挂了怎么办 只是自己的作业&#xff0c;可能会有问题&#xff0c;欢迎前来指正 一、题目&#xff08;100分&#xff09; 一、创建后面给出的这6个表&#xff08;20分&#xff09; 二、用不同…

Ubuntu20.04 个人配置和i3美化

Ubuntu20.04 个人配置和i3美化 本文是基于个人习惯和审美&#xff0c;快速配置一个新ubuntu的步骤。脚本在资源里给出&#xff0c;但仍有部分配置文件需在脚本执行后手动修改,文中已用红色字体标出 更新apt源 备份原来的源更换阿里源 # 备份 sudo mv /etc/apt/sources.list…

Camunda流程引擎查询接口API介绍

Camunda流程引擎底层采用了mybatis作为ORM框架&#xff0c;并封装了一套自己的数据查询接口&#xff0c;以下是几种可以Camunda流程引擎中查询数据的方式。 Java 查询API 。使用 Fluent Java API 来查询流程引擎实体&#xff0c;比如流程实例、任务等。REST 查询API 。通过 RE…

SpringMVC启动流程方式分析-三种方式

SpringMVC的启动方式 本文所叙述的是springmvc放入Tomcat servlet容器的启动方式 第一种Web.xml文件配置 使用传统的web.xml配置文件&#xff0c; 指定DispatchServlet &#xff0c;当然如果想要父子容器的效果指定一个ContextLoaderListener 上下文加载监听器就行&#xff…

少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(选择题)2022年12月

2022年12月Scratch等级考试一级真题解析 选择题(共25题,每题2分,共50分) 1、默认小猫角色和气球角色都是显示状态,小猫程序如下图所示,气球没有程序,点击绿旗,舞台上最终显示的效果是 A、可能出现6个不同位置的小猫和6个小球 B、可能出现6个不同位置的小猫和1个气球…

【嵌入式Linux】Jetson nano GPIO应用 | 驱动开发 | 官方gpiolib、设备树与chip_driver

GPIO子系统 0.暴露给应用层 应用 $ echo 79 > /sys/class/gpio/export //导出79号gpio 引脚&#xff0c;使得可在应用层访问 $ echo out > /sys/class/gpio/gpio79/direction //设置 为输出 $ echo 1 > /sys/class/gpio/gpio79/value //输出高电平 开灯 $ echo 0…

win10系统部署-zabbix客户端

一、下载win10系统 zabbix客户端 下载地址&#xff1a; 根据自己需求下载 https://www.zabbix.com/cn/download二、win系统安装客户端 1、解压安装包 c:\zabbix 2、编辑zabbix\conf\zabbix_agentd.conf文件 Server127.0.0.1,IP IP是你的zabbix服务器端地址 ServerActive127…