Java操作Zookeeper框架

news/2024/5/17 15:20:26/文章来源:https://blog.csdn.net/weixin_53280379/article/details/126816305

Zookeeper框架

注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hive Flume等等~写的都是纯干货,各种顶会的论文解读,一起进步。
今天继续和大家分享一下Java操作Zookeeper框架
#博学谷IT学习技术支持


文章目录

  • Zookeeper框架
  • 前言
  • 一、shell命令操作ZK的节点
  • 二、ZK节点的属性
  • 三、ZK的Watch机制
  • 四、ZK的Java操作
  • 五、ZK的选举机制
  • 总结


前言

在这里插入图片描述
1、ZK内部有一个树形的结构的`目录树
2、访问目录树的节点必须使用绝对路径
3、ZK的节点称为Znode
4、Znode既具有文件特点(存数据),又具有文件夹特点(有子节点)
5、ZK中主要存储配置信息,数量量不大,一般是以K为单位,最多不超过1M


一、shell命令操作ZK的节点

1:创建普通永久节点#永久节点永远存在,除非手动删除create /app1 hello    2: 创建永久顺序节点#永久顺序节点永远存在,除非手动删除,会自动在节点名字后边加一串数字,该数字表示创建节点的先后顺序
#永久顺序节点的创建命令可以多次执行,因为后边会自动加编号create -s /app2 world   3:创建临时节点#临时节点依赖当前的会话(客户端和服务器构建的连接),会话消失,则节点自动消失
create -e /tempnode world4:创建临时顺序节点#临时顺序节点依赖当前的会话(客户端和服务器构建的连接),会话消失,则节点自动消失
#临时顺序节点的创建命令可以多次执行,因为后边会自动加编号
create -s -e /tempnode2 aaa5:创建子节点create /app1/app1_1 null      #永久节点的子节点create -s /app1/app1_2 null   #永久顺序节点的子节点#注意:临时节点,不能创建子节点6:获取节点数据get  /app1get /app1/app1_17:修改节点数据set /app1  hadoop8:删除节点delete  /app1 删除的节点不能有子节点rmr    /app1 递归删除

二、ZK节点的属性

1、查看ZK节点属性get /app12、分析节点属性
nulll                                    #节点数据
cZxid = 0x900000009                      #节点创建事务ID,和创建的时机有关,该值不变
ctime = Sat Sep 03 13:51:44 CST 2022     #节点创建时间
mZxid = 0x900000009					     #节点的修改事务ID,每次都节点进行修改,该值加1
mtime = Sat Sep 03 13:51:44 CST 2022     #节点修改时间
pZxid = 0x900000009					     #子节点的事务ID,子节点发生变化,则会增加
cversion = 0                             #子节点的版本号
dataVersion = 0							 #节点数据版本,对字节数据修改,则值加1
aclVersion = 0							 #节点的权限
ephemeralOwner = 0x0	                 #永久节点:0x0 	临时节点(会话id): 0x182f95799320001
dataLength = 5						     #节点数据的长度
numChildren = 0							 #子节点的数量

三、ZK的Watch机制

wath机制就是监控一个节点的变化
数据修改
添加操作
删除操作

一旦监控到节点发生变化,则会自动触发某个行为(自定义):通知备用节点让他去进行节点创建

ZK的watch机制在命令行终端是一次性的,如果想重复的监听,则必须使用Java代码来完成

四、ZK的Java操作

    <dependencies><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>2.12.0</version></dependency><dependency><groupId>com.google.collections</groupId><artifactId>google-collections</artifactId><version>1.0</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.25</version></dependency></dependencies>
package pack01_zookeeper;import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.cache.TreeCache;
import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
import org.apache.curator.framework.recipes.cache.TreeCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class Demo1Zookeeper {CuratorFramework client;@Beforepublic void init(){//定义重置策略ExponentialBackoffRetry policyRetry = new ExponentialBackoffRetry(3000, 3);//创建客户端对象String str = "node1:2181,node2:2181,node3:2181";client = CuratorFrameworkFactory.newClient(str, policyRetry);//开启客户端client.start();}//创建节点@Testpublic void createZnode() throws Exception {//创建永久节点client.create().forPath("/app1","hello".getBytes());//创建多级节点client.create().creatingParentsIfNeeded().forPath("/app2/app2_2","hello".getBytes());//创建不同节点的类型client.create().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath("/app3","hello".getBytes());
//        PERSISTENT                          -- 永久节点
//        PERSISTENT_SEQUENTIAL               -- 永久顺序节点
//        EPHEMERAL                           -- 临时节点
//        EPHEMERAL_SEQUENTIAL(3, true, true); --临时顺序节点}//修改节点数据@Testpublic void setZnode() throws Exception {client.setData().forPath("/app1","helloZK".getBytes());}//查询节点数据@Testpublic void getZnode() throws Exception{byte[] bytes = client.getData().forPath("/app1");String str = new String(bytes);System.out.println(str);}//删除节点@Testpublic void deleteZnode() throws Exception{client.delete().deletingChildrenIfNeeded().forPath("/app2");}//watch监听机制@Testpublic void watchDemo() throws Exception{//将要监听的的节点数存入缓存中TreeCache treeCache = new TreeCache(client, "/app1");//自定义监听treeCache.getListenable().addListener(new TreeCacheListener() {//childEvent方法是自动调用,只要你的/app1节点有状态变化,则就会自动执行该方法@Overridepublic void childEvent(CuratorFramework curatorFramework, TreeCacheEvent treeCacheEvent) throws Exception {switch (treeCacheEvent.getType()){case NODE_ADDED:System.out.println("NODE_ADDED");break;case NODE_REMOVED:System.out.println("NODE_REMOVED");break;case NODE_UPDATED:System.out.println("NODE_UPDATED");break;}}});treeCache.start();while (true);}@Afterpublic void close(){//关闭客户端client.close();}}

五、ZK的选举机制

1、场景1: 启动ZK,需要选举Leader

node1启动 投自己1票 和其他主机交换投票信息,系统判断投票数是否过半,否
node2启动 投自己1票 和其他主机交换投票信息,系统判断投票数是否过半,是,谁的myid最大,就是Leader node3启动 投自己1票 和其他主机交换投票信息,发现已经有Leader了,直接成为Follower

启动顺序: node3 ndoe2 node1 ----》node3就是leader

2、场景2:ZK运行的过程中,Leader挂掉,需要选举Leader
2.1 当Leader挂掉之后,系统会判断剩余的主机是否过半,是,则开始选举新Leader,否,则直接终止整个集群
2.2 如果剩余的主机过半,则开始选举新Leader
a:比较哪台主机的数据最新,如果某台主机的数据最新,则直接当选Leader
b:如果所有主机的数据都是一样新的,则谁的myid最大,谁就是Leader


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Java操作Zookeeper框架

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

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

相关文章

Java Double equals()方法具有什么功能呢?

转自: Java Double equals()方法具有什么功能呢&#xff1f; 下文笔者将讲述equals()方法的功能简介说明&#xff0c;如下所示: equals()方法的功能 java.lang.Double.equals()方法的功能: 将当前的Double对象同一个对象进行比较&#xff0c; 当Object是一个Double对象&…

【牛客 - 剑指offer】JZ8 二叉树的下一个结点 Java实现

文章目录剑指offer题解汇总 Java实现本题链接题目方案一 中序遍历递归代码一 设置flag标记代码二 获取整个arrayList的大小方案二 分类直接寻找&#xff08;分情况讨论&#xff09;思路代码&#xff08;版本一&#xff09;代码&#xff08;版本二&#xff09;剑指offer题解汇总…

计算机毕业设计成品java项目开发实例SSM+MySQL实现的家庭医生预约平台

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 一、项目介绍 二、项目截图 三、项目获取 一、项目介绍 java毕业设计计算机毕设项目之基于SSMMySQL实现的家庭医生预约平台_哔哩哔哩_bilibilijava毕业设计计算机毕设项目之基于SSMMyS…

记首次协助搭建服务器

一&#xff0c;服务器资源申请 1&#xff09;使用云服务器&#xff08;k8s&#xff09;还是IDC服务器 云服务器VS IDC服务器 不同&#xff1a; 费用一样&#xff0c;云服务器支持动态扩容 私有云和IDC没有很大区别&#xff0c;只是私有云支持k8s&#xff0c;动态扩容方便。…

python 日志处理(基础篇)

Logging处理 日志级别等级排序&#xff1a;critical > error > warning > info > debug debug : 打印全部的日志( notset 等同于 debug ) info : 打印 info, warning, error, critical 级别的日志 warning : 打印 warning, error, critical 级别的日志 error : 打…

笑霸餐厅 | 瑞吉外卖项目 | 完整基础部分(后端学习笔记)

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;项目专栏 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

Android ActionBar

android的ActionBar是3.0才推出的,3.0之前称之为AppBar。为了向后兼容,ActionBar位于Android的支持库AppCompat中,所以要使用ActionBar先必须依赖AppCompat库(现在新建的工程默认都依赖此库了)implementation androidx.appcompat:appcompat:1.3.0如果没有在主题Theme中或Ac…

【小月电子】安路国产FPGA开发板系统学习教程-LESSON6按键消抖

按键消抖例程讲解若要观看该博客配套的视频教程&#xff0c;可点击此链接根据多年工作经验&#xff0c;总结出的FPGA的设计流程&#xff0c;概括起来总共有以上12步&#xff0c;其中根据项目难易度可省去其中一些步骤。比如非常简单的项目&#xff0c;我们可以省去虚线框里面的…

java基于微信小程序的电影院购票选座 uniapp 小程序

随着移动应用技术的发展,越来越多的用户借助于移动手机、电脑完成生活中的事务,许多的传统行业也更加重视与互联网的结合,由于城镇人口的增加,人们去电影院总是排着长长的队伍,对于时间紧的人是一个非常头痛的事情,有的人可能就是排队也要用去半天时间,人们为了缓解排队就购票的…

TFT-eSPI入门使用教程

一、准备资料开发板:ESP32-S3 屏驱动是:ST7789_DRIVER 开发环境:VS Code + PlatformIO注意:以上是我使用的环境,不一定需要和是使用的东西一样,这里主要是学习TFT-eSPI开源驱 二、获取TFT-eSPI GitHub:https://github.com/Bodmer/TFT_eSPI 三、配置User_Setup.h文件 在路…

【软件与系统安全笔记】二、软件与系统安全基础

【软件与系统安全】二、软件与系统安全基础 这是《【软件与系统安全】笔记与期末复习》系列中的一篇 2022-01-17 第二次课 2022-02-21 第三次课前部分 计算机安全的目标&#xff1a; 防止信息“遭遇不测事件”, 但不能阻止“好的事情”发生&#xff08;“好的事情”包括功能性…

基于Android studio+SSH的单词记忆(背单词)APP设计

目录 引言 3 1.1. 项目介绍 3 课程设计选题《单词记忆APP》 3 1.2. 项目的目的和意义 3 1.3. 相关技术介绍 5 1.3.1. ionic angular cordova混合框架 5 1.4. 后端SSH框架 6系统需求分析 8 2.1. 软件功能 8 2.1.1. 需求分析 8 2.2. 功能性需求 9项目介绍 10 3.1. 系统的开发环…

手机上有没有跨平台轻量级的备忘录?

当你在读书时,如果想要随手记录读书笔记,那你会采取什么方式做读书笔记呢?当你在工作时,如果想要随后记录工作注意事项或常用的一些工作资料,那你会如何记录呢?相信有不少网友都会使用手机上的备忘录软件来做读书笔记,随手记事;而在电脑上会直接使用TXT或Word来记录工作…

Apple Xcode 14 (14A309) 正式版发布(含下载)

请访问原文链接&#xff1a;Apple Xcode 14&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org Xcode 14 包含了在所有 Apple 平台上开发、测试和分发 App 所需的一切资源。利用 Swift 和 SwiftUI 的易用性与强大能力以及全新…

微信抖音快手三合一壁纸小程序源码_后端管理设置功能丰富

介绍&#xff1a; 这是一款支持快手端,微信端,抖音三端的一个壁纸类型的小程序 一个后台同时管理三端,内有丰富的后端设置 安装也是特别的简单(压缩包里面也有文本安装教程) 另外支持静态壁纸显示,动态壁纸显示或者头像表情包等等 前端自适应识别所属内容然后根据内容来自…

Win11右键显示更多选项设置教程

Win11如何设置右键显示更多选项?如果你觉得每次右键菜单,都是需要点击“显示更多选项”十分麻烦,那么可以通过设置,让其直接显示出现。那么应该如何操作呢?下面小编就为大家带来具体的操作步骤,我们一起来学习下吧。Win11右键显示更多选项设置方法:1、首先用鼠标右键点击…

使用位移基本场方法对空间扩展光源进行建模

1. 摘要 利用VirtualLab Fusion的参数耦合功能可在光学设置中耦合参数。耦合的参数可重新计算系统的其他参数&#xff0c;进而自动保持系统参数间的关系。因此&#xff0c;参数耦合功能使用户可以参数设置复杂的依存关系。例如&#xff0c;在此示例中&#xff0c;我们使用参数…

234.回文链表

题目来源&#xff1a;力扣https://leetcode.cn/problems/palindrome-linked-list/solution/hui-wen-lian-biao-by-leetcode-solution/ 题目简介&#xff1a;简单的就是判断一个链表是否为回文链表 双指针 思路&#xff1a;首先就是可以想到用个双指针一个指头&#xff0c;一…

河北稳控科技DLS11 网关中继器(LTE-LoRA) 数据发送机制

河北稳控科技DLS11 网关中继器(LTE-LoRA) 数据发送机制 DLS11 是 LoRA-LTE 网关设备,专用于接收其它 LoRA 设备发来的数据包存储并在预定的时间间隔后统一发送(目前支持 VSxxx、NLM3、NLM5、NLM6 的 LoRA 数据包格式)。发送的方式有:UART、TCP、EMAIL、FTP、RF,通过设置…

高效掌握JDBC技术(三)| 三层架构理念 | 书写符合事务特性的工具类 | JUnit测试框架 | JDBC项目开发步骤

✅作者简介&#xff1a;热爱后端语言的大学生&#xff0c;CSDN内容合伙人 ✨精品专栏&#xff1a;C面向对象 &#x1f525;系列专栏&#xff1a;JDBC快速入门 文章目录1、三层架构1.1、数据访问层1.2、业务逻辑层1.2.1、组成1.3、表示层1.3.1、实现1.4、完整实现步骤2、事务及J…