详解zookeeper安装使用

目录

1.概述

1.1.功能

1.2.特点

1.3.数据结构

2.安装

2.1.Windows

2.2.Linux

3.基础操作

3.1.增

3.2.删

3.3.改

3.4.查

3.5.监听

4.JAVA操作Zookeeper

4.1.依赖

4.2.客户端

4.3.增

4.4.删

4.5.查

4.6.改


1.概述

1.1.功能

zookeeper,Apache旗下一款分布式服务的协调、管理组件。主要有两个功能:

  • 存储
  • 通知

1.存储

zookeeper的存储,类似数据库,用来存放数据,其中存放的是一些数量不大但是很重要、全局都需要的信息,比如可以用来当做注册中心、存放各个服务的信息。

2.通知

客户端向zookeeper服务器进行注册,声明自己想要观察该zookeeper server的何种信息,成为该zookeeper server的观察者,一旦所要观察的信息有变化,zookeeper会向注册在案的该信息对应的观察者发送通知。

1.2.特点

zookeeper有两大特点:

  • CP,强一致性、分区容错性。
  • 自带负载均衡,每次对集群中的访问会自动映射到当前负载最小的节点上去。

1.3.数据结构

zookeeper的数据模型结构与Unix文件系统很类似,是一棵树,每个节点称为znode,每一个znode默认能存储1MB数据,每个znode通过唯一路径标识。

2.安装

2.1.Windows

下载:

直接在官网上下载压缩包,解压即可。

启动:

指令脚本在安装目录下的bin目录下,Windows的启动脚本是zkServer.cmd

启动会报错,因为缺少配置文件:

zookeeper启动时去config目录下扫描的配置文件名为zoo.cfg,而该目录下默认下载安装后只有一个zoo_sample.cfg,这是zookeeper官方给出的一个配置文件模板,可以直接将其改名为zoo.cfg即可正常启动zookeeper。

启动客户端:

启动zookeeper服务器后,启动客户端即可在客户端中使用指令来操作zookeeper。

2.2.Linux

Linux的配置文件示例:

tickTime:心跳时间,沟通间隔,单位,心跳个数。

initLimit:服务器启动时的同步阶段耗时,单位,心跳个数。

syncLimit:从发出一个通知到收到响应的等待时间,单位,心跳个数。

server.编号:集群配置,集群中编号唯一,与数据目录下的myid中的值对齐。

节点IP:通信端口:选举端口;服务端口。

3.基础操作

3.1.增

不能创建空节点,只能创建带数据的节点。

 

 

-e  -s  可以混用,创建有序的临时节点。

3.2.删

3.3.改

3.4.查

查数据:

 查状态:

  • cZxid: 这是导致创建znode更改的事务ID.
  • mZxid :这是最后修改znode更改的事务ID.
  • oZxid:这是用于添加或删除了节点的znode更改的事务ID。
  • ctime: 表示从1970-01-01T00:00:00Z开始以毫秒为单位的znode创建时间
  • mtime: 表示从1970-01-01T00:00:00Z开始以毫秒为单位的znode最近修改时间。
  • dataVersion: 表示对该znode的数据所做的更改次数
  • cversion: 这表示对此znode的了节点进行的更改次数
  • acIVersion: 表示对此znode的ACL进行更改的次数ephemeralOwner:如果znode是ephemera类型节点,则这是node所有者的 session D,如果ode不是ephemera#点,则该字段设置为零。
  • dataLength: 这是znode数据字段的长度
  • numChildren: 这表示znode的子节点的数量

3.5.监听

watch,监听机制, zookeeper通知功能的落地实现,Zookeeper 中非常重要的特性,我们基于 zookeeper 上创建的节点,可以对这些节点绑定监听事件。比如可以监听节点数据变更、节点变更、状态变更等事件,通过这个事件机制,可以实现基于 zookeeper的分布式锁、集群管理等功能。

当数据发生变化的时候, zookeeper 会产生一个 watcher 事件,并且会发送到客户端。但是客户端只会收到一次通知。如果后续这个节点再次发生变化,那么之前设置 watcher 的客户端不会再次收到消息(watcher 是一次性的操作),可以通过循环监听去达到永久监听效果 。

ls  路径 watch   监听该路径下子节点的变化

get  路径  watch  监听该路径下数据的变化

4.JAVA操作Zookeeper

4.1.依赖

版本号,自己确定一下,这里博主用的3.5.8而已:

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.8</version>
</dependency>

4.2.客户端

构造函数有三个参数:

  • 连接地址,zookeeper的IP地址
  • 会话超时时间,超过此时间server没有收到client的心跳会断开会话,清理该会话的临时数据。
  • watch通知,watch的数据有变的时候返回的通知。

4.3.增

三个参数:

  • path:路径

  • data:数据

  • ACL机制:使用zookeeper API中自带的枚举类CreateMode:创建临时节点还是永久节点(-e  还是  -s),使用zookeeper API中自带的枚举类

4.4.删

zooKeeper.delete(znodePath, -1);

在 ZooKeeper 中,当删除一个 znode(节点)时,需要传递一个版本号作为版本检查的条件。这个版本号用来确保在删除操作执行时,znode 的版本和指定的版本号是一致的。如果版本号不匹配,删除操作将会失败。

在删除方法 zooKeeper.delete(znodePath, version) 中,第二个参数 version 是用来指定要删除的 znode 的版本号。当 version 参数设置为 -1 时,表示不执行版本检查,即忽略 znode 的版本,直接删除该 znode。这意味着无论 znode 的版本是什么,都会被删除。

4.5.查

查节点:

查数据:

查状态:

 

4.6.改

version,版本号,要与dataVersion严格对齐,

可以查状态获得版本号,

修改成功后dataVersion会自加1。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8S初级入门系列之二-集群搭建

一、前言 为了更好学习K8S&#xff0c;建议自行搭建一套K8S的环境&#xff0c;目前比较流行的有两种搭建工具&#xff0c;一种是单机版的minkube&#xff0c;一种是集群版的kubeadm。minkube更多是用于实验环境&#xff0c;且单机版隐藏了很多细节&#xff0c;而kubeadm更贴近实…

【C语言】指针---初阶

&#x1f341; 博客主页:江池俊的博客 &#x1f341;收录专栏&#xff1a;C语言——探索高效编程的基石 &#x1f341; 如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏&#x1f31f; 三连支持一下博主&#x1f49e; 目录 一、指针是什么&#xff1f; 1.1指…

2min搞定 mac pycharm新建导入python项目

mac pycharm新建和导入python项目&虚拟环境配置&下载类库 一、通用设置step1 、通过自定义配置&#xff0c;指定默认虚拟环境变量step2、设置虚拟环境和指定默认工作空间step3 、导入或者新建python项目 二、pycharm新建python项目step1、点击新建【file->newProjec…

抖音、美团、华为“巧”搅支付春水

配图来自Canva可画 如今&#xff0c;移动支付已经成了当下最流行的支付方式&#xff0c;从小吃店到大商超&#xff0c;从地铁、公交到飞机、高铁&#xff0c;移动支付的应用场景层出不穷&#xff0c;可以说&#xff0c;现代人的生活已经离不开移动支付了。而在此背景下&#x…

动态内存常见的问题

对空指针的解引用 改正后的代码&#xff1a; 返回栈&#xff08;临时变量&#xff09;空间地址的问题 释放空间后及时把指针设为空 void Test(void) {char* str (char*)malloc(100);strcpy(str, "hello");free(str);str NULL;//释放空间后及时把指针设为空if (s…

25-30天每日强训选择题改错解析

int i5; int s(i)(i)(i–)(–i); s( )//s 的值是什么&#xff1f; A 28 B 25 C 21 D 26 E 24 F 23 正确答案&#xff1a; E 5775 24 或者 --在后先不变化数值 -- 在前先变化再运算 以下哪项不属于java类加载过程&#xff1f; A 生成java.lang.Class对象 B int类型对象成…

【MySQL】存储引擎(六)

&#x1f697;MySQL学习第六站~ &#x1f6a9;本文已收录至专栏&#xff1a;MySQL通关路 ❤️文末附全文思维导图&#xff0c;感谢各位点赞收藏支持~ 一.引入 大家可能没有听说过存储引擎&#xff0c;但是一定听过引擎这个词&#xff0c;引擎就是发动机&#xff0c;是一个机器…

疲劳驾驶检测和识别2:Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码)

疲劳驾驶检测和识别2&#xff1a;Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 目录 疲劳驾驶检测和识别2&#xff1a;Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 1.疲劳驾驶检测和识别方法 2.疲劳驾驶数据集 &#xff08;1&#xff09;疲…

系统架构设计师-软件架构设计(2)

目录 一、基于架构的软件开发方法&#xff08;ABSD&#xff09; 1、架构需求 1.1 需求获取 1.2 标识构件 1.3 架构需求评审 2、架构设计 2.1 提出架构模型 2.2 映射构件 2.3 分析构件的相互作用 2.4 产生架构 2.5 设计评审 3、架构文档化 4、架构复审 5、架构实现 5.1 分析与…

探寻智能化未来:AI与Web3共创金融领域巨大潜力

人工智能&#xff08;AI&#xff09;和Web3技术的迅猛发展为我们带来了许多新的机遇和影响。在数字经济和社会的浪潮中&#xff0c;结合了AI的智能化能力和Web3的去中心化与区块链技术&#xff0c;我们将进入一个智能化的Web3时代。人工智能和Web3技术是开拓生产力极限和重新定…

LabVIEW使用支持向量机对脑磁共振成像进行图像分类

LabVIEW使用支持向量机对脑磁共振成像进行图像分类 医学成像是用于创建人体解剖学图像以进行临床研究、诊断和治疗的技术和过程。它现在是医疗技术发展最快的领域之一。通常用于获得医学图像的方式是X射线&#xff0c;计算机断层扫描&#xff08;CT&#xff09;&#xff0c;磁…

记录安装stable diffusion webui时,出现的gfpgan安装卡住的问题

参考链接&#xff1a;(145条消息) 使用stable diffusion webui时&#xff0c;安装gfpgan失败的解决方案&#xff08;windows下的操作&#xff09;_新时代原始人的博客-CSDN博客

【Seata】微服务集成seata

文章目录 1、Seata介绍2、Seata架构3、部署TC服务4、微服务集成seata 1、Seata介绍 Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。 官网http://seata.io/ 2、Seata架构 Seata事务管理有三个角色&#xff1a; TC (Transaction Coordinator) - 事务…

UI 自动化的 PageObject 设计模式

目录 前言&#xff1a; 什么是 PageObject 模型&#xff1f; 为什么使用 PageObject 模型&#xff1f; PO 模式优点 PageObject 实践 前言&#xff1a; UI 自动化是一种软件测试方法&#xff0c;它主要用于检查应用程序的用户界面是否符合预期。PageObject 是 UI 自动化中…

信息安全与网络空间安全 - 保障您的在线安全

数据参考&#xff1a;CISP官方 目录&#xff1a; 信息与信息安全 信息安全属性 网络安全发展阶段 网络空间安全保障 一、信息与信息安全 1、什么是信息&#xff1f; 定义&#xff1a;信息是通过传递和处理的方式&#xff0c;用于传达知识、事实、数据或观点的内容。形…

华为盘古大模型:能源领域的颠覆性突破

近日&#xff0c;华为盘古大模型在能源领域横空出世&#xff0c;引发了广泛关注和期待。作为一项具有颠覆性影响的技术创新&#xff0c;华为盘古大模型在能源行业中展现出巨大的潜力和前景。其优质的计算能力和智能优化算法&#xff0c;将为能源产业带来翻天覆地的变革。 盘古大…

List集合类详解(附加思维导图)

目录 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 2.2、LinkedList集合常用方法 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中…

Flink CEP (一)原理及概念

目录 1.Flink CEP 原理 2.Flink API开发 2.1 模式 pattern 2.2 模式 pattern属性 2.3 模式间的关系 1.Flink CEP 原理 Flink CEP内部是用NFA&#xff08;非确定有限自动机&#xff09;来实现的&#xff0c;由点和边组成的一个状态图&#xff0c;以一个初始状态作为起点&am…

PHP注册/登录/发邮件--【强撸项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图phpStudy 设置导数据库程序基本流程项目目录如图&#xff1a;注册zhuce.html配套资源作业&#xff1a; 本系列校训 用免费公开视频&#xff0c;卷飞培训班哈人&…

C# Modbus通信从入门到精通(21)——Modbus TCP协议原理

Modbus TCP是走网口的&#xff0c;也可以在同一时间内有多个从站访问主站&#xff0c;并且通过Modbus事务处理标识来区分同一时刻的不同Modbus事务&#xff0c;这是区别于Modbus ASCII和Modbus RTU的地方。 1、访问模式&#xff1a; Modbus客户端通常输入Modbus服务器的IP地址…