zookeeperAPI操作与写数据原理

 

要执行API操作需要在idea中创建maven项目

(改成自己的阿里仓库)导入特定依赖

添加日志文件

上边操作做成后就可以进行一些API的实现了

目录

 导入maven依赖:

创建日志文件:

创建API客户端:

(1)创建全局变量:

(2)初始化(init):

(3)创建节点(create):

(4)监听API:

(5)检测节点是否存在:

写数据原理:

(1)写流程之写入请求直接发送给Leader节点:

(2)写流程之写入请求发送给follower节点

 导入maven依赖:

<dependencies> 
 <dependency> 
 <groupId>junit</groupId> 
 <artifactId>junit</artifactId> 
 <version>RELEASE</version> 
 </dependency> 
 <dependency> 
 <groupId>org.apache.logging.log4j</groupId> 
 <artifactId>log4j-core</artifactId> 
 <version>2.8.2</version>
</dependency> 
 <dependency> 
 <groupId>org.apache.zookeeper</groupId> 
 <artifactId>zookeeper</artifactId> 
 <version>3.5.7</version> 
 </dependency> 
</dependencies> 

创建日志文件:

需要在项目的 src/main/resources 目录下,新建一个文件,命名为“log4j.properties”

log4j.rootLogger=INFO, stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] 
- %m%n 
log4j.appender.logfile=org.apache.log4j.FileAppender 
log4j.appender.logfile.File=target/spring.log 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] 
- %m%n 

创建API客户端:

(1)创建全局变量:

  String connectString="hadoop102:2181,hadoop103:2181,hadoop104:2181";
    int sessionTimeout=2000;
    ZooKeeper zkClient=null;
String connectString---要连接那个zookeeper,
int sessionTimeout ---延迟时间
ZooKeeper zkClient ---表示要创建的客户端  申请为全局变量有助于后边各方法的调用

(2)初始化(init):

  @Before
public void init() throws Exception {
    // Watcher watcher ---监听器
     zkClient= new ZooKeeper(connectString, sessionTimeout, new Watcher() {
        @Override
        public void process(WatchedEvent watchedEvent) {
            List<String> children = null;
            System.out.println("-------------------------------");
            try {
                children = zkClient.getChildren("/", true);
            } catch (KeeperException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
                for (String child : children) {
                    System.out.println(child);
            }
        }
    });
}

@Befor注解在此不在解释不会可看本人前面文章(Java注解篇)

首先初始化了一个zookeeper的客户端对象

重写了process方法,这个方法在不使用监听器的时候可以不写代码

在开启监听器的时候(可以听后续监听器API)

由于监听器是调用一次只能使用一次,不能实时监听,所以我们要在初始化方法里添加监听逻辑(process方法),就会在每次所监听的数据发生改变的时候调用该方法,我们在创建客户端对象的时候为该对象设置了监听器,从而在删除的时候也会触发监听

(3)创建节点(create):

@Test
public void create() throws Exception {
    //String path,---在那个节点下创建节点
    // byte[] data, ----节点数据
    // List<ACL> acl,----权限
    // CreateMode createMode)----创建节点的类型
    String nodecreate = zkClient.create("/atguigu","tangxiaocong".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
}

(4)监听API:

@Test
    public void getChildren() throws Exception {
        //String path----监听路径, boolean watch---设置监听器为true
        //true注册一次监听(记不起来就去看监听原理)就只能生效一次,所以在init哪里就需要添加注册
        List<String> children = zkClient.getChildren("/", true);
        for (String child : children) {
            System.out.println(child);
        }
        // 延时阻塞--实时监控
        Thread.sleep(Long.MAX_VALUE);
    }

(5)检测节点是否存在:

 @Test
    //查看节点是否存在
    public void exists() throws InterruptedException, KeeperException {
        //关闭监听
        Stat exists = zkClient.exists("/atguigu", false);
        System.out.println(exists==null?"not exist":"exist");
    }

写数据原理:

(1)写流程之写入请求直接发送给Leader节点:

        1.客户端向leader发出写请求

        2.leader接收到写请求会通知靠近它的follower执行写请求

        3.follower回应给leader(三台服务器现在已经有两台做出了回应(大于1/2)就会开始进行写操作,让后再处理后续服务器---效率高)

        4.现在得出的回应大于1/2,则leader对客户端给出回应

        5.leader会继续给其他的follower发送写请求

        6.follower得到请求给出回应

(2)写流程之写入请求发送给follower节点:

        1. 客户端向follower发出写请求

        2.写请求转发从follower需要转请求给leader(转请求后于上述操作相似)

        3.先通知(转发请求的)follower执行写请求

        4.follower对leader的请求做出回应(已经超过半数服务器做出回应,则执行写操作)

        5.leader做出回应返回给转发请求的follower

        6.该follower返回给客户端(Client)

        7.leader通知其他follower执行写请求

        8.做出回应后重复5.6步骤

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

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

相关文章

【uniapp】uniapp自动导入自定义组件和设置分包:

文章目录 一、自动导入自定义组件&#xff1a;二、设置分包和预加载&#xff1a; 一、自动导入自定义组件&#xff1a; 【Volar 官网】https://github.com/vuejs/language-tools 二、设置分包和预加载&#xff1a; 【官方文档】https://uniapp.dcloud.net.cn/collocation…

android开发之Android 自定义滑动解锁View

自定义滑动解锁View 需求如下&#xff1a; 近期需要做一个类似屏幕滑动解锁的功能&#xff0c;右划开始&#xff0c;左划暂停。 需求效果图如下 实现效果展示 自定义view如下 /** Desc 自定义滑动解锁View Author ZY Mail sunnyfor98gmail.com Date 2021/5/17 11:52 *…

开发工具Eclipse的使用之导入项目(import)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Eclipse使用的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.导读 二.详细操作步骤 1.右击项…

【深度学习】StyleGANv2 2019 论文,Analyzing and Improving the Image Quality of StyleGAN

StyleGAN论文&#xff1a; 《A Style-Based Generator Architecture for Generative Adversarial Networks》 论文&#xff1a;https://arxiv.org/abs/1812.04948 代码&#xff1a; https://github.com/NVlabs/stylegan StyleGANv2论文&#xff1a; 《Analyzing and Improving …

电池的正极是带正电?

首先说明结论&#xff1a;电池正极带正电&#xff0c;负极带负电。 一个错误的实例&#xff1a; 如果说电流是从电池正极流动到电池负极&#xff0c;那么电子就是从负极流动到正极&#xff0c;那么正极就是带负电。----这个说法是错误的。这是因为&#xff0c;根据那么很出名…

简绘ChatGPT支持Midjourney绘图 支持stable diffusion绘图

简绘支持Midjourney绘图和stable diffusion绘图。 这意味着简绘具备Midjourney绘图和stable diffusion绘图功能的支持。

无涯教程-Perl - redo函数

描述 此函数将重新启动当前循环,而不会强制判断控制语句。块中不再执行任何语句。如果存在继续块,将不会执行。如果指定了LABEL,则在LABEL标识的循环开始时重新开始执行。 语法 以下是此函数的简单语法- redo LABELredo返回值 此函数不返回任何值。 例 以下是显示其基本…

Shell编程之条件测试、if语句、case语句

条件语句 一、条件测试1.1 测试命令1.1 文件测试1.2 整数比较1.3 字符串比较1.4 逻辑测试1.4.1 逻辑与 &&1.4.2 逻辑或 || 1.4.3 组合应用1.5 多个命令组合执行 ( ) { } 二、if语句2.1单分支结构2.2 多分支结构2.4 if语句练习2.4.1 单分支2.4.2 简单的交互式分数反馈 三…

元宇宙核能发电VR模拟仿真实训教学为建设新型电力系统提供重要支撑

随着“碳达峰、碳中和”目标与建设新型能源体系的提出&#xff0c;在元宇宙环境下建设电力系统是未来发展的趋势。以物联网、区块链、数字孪生、混合现实等技术为主要代表的元宇宙技术体系及其在电力和能源系统中的应用&#xff0c;将会促进智能电网的发展&#xff0c;为建设新…

VR安全宣传系列:防触电虚拟现实体验

在电气工作中&#xff0c;安全问题始终是重中之重。为了更好地提高公众的电气安全意识和技能&#xff0c;广州华锐互动开发了一种基于虚拟现实技术的模拟系统——VR防触电虚拟体验系统。这种系统可以模拟各种因操作不当导致的触电事故场景&#xff0c;并提供沉浸式的体验&#…

利用OpenSSL实现私有 CA 搭建和证书颁发

利用OpenSSL实现私有 CA 搭建和证书颁发 一、私有 CA 搭建1. 安装openssl2. 配置 openssl3. 生成 CA 自己的私钥4. 生成 CA 自己的自签证书5. 验证自签证书 二、向私有CA申请证书流程1. 生成应用私钥文件2. 根据应用私钥生成证书申请文件3. 向CA请求颁发证书4. 验证应用证书5. …

2022年09月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;指定顺序输出 依次输入3个整数a、b、c,将他们以c、a、b的顺序输出。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 一行3个整数a、b、c&#xff0c;以空格分隔。 0 < a,b,c < 108 输出 一行3个整数c、a、b&#xff0c;整数之间以一个空格分…

腾讯云服务器标准型CVM实例详细介绍S5/S6/SA2/SR1/SA3/S4等

腾讯云CVM服务器标准型实例的各项性能参数平衡&#xff0c;标准型云服务器适用于大多数常规业务&#xff0c;例如&#xff1a;web网站及中间件等&#xff0c;常见的标准型云服务器有CVM标准型S5、S6、SA3、SR1、S5se等规格&#xff0c;腾讯云服务器网来详细说下云服务器CVM标准…

使用sqlplus连接oracle,提示ORA-01034和ORA-27101

具体内容如下 PL/SQL Developer 处 登录时 终端处 登录时 ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Process ID: 0 Session ID: 0 Serial number: 0 解决方法是执行以下命令 sqlplus /nolog conn / as sysdba startup …

0001nginx简介、相关模型与原理

文章目录 一. 什么是Nginx二. ngnix的一些模型1、nginx的进程模型2、worker的抢占&#xff08;锁&#xff09;机制模型3. nginx事件处理模型 三. nginx加载静态资源的过程 一. 什么是Nginx Nginx是一个高性能HTTP反向代理服务器&#xff0c;以下是nginx的相关能力 反向代理&am…

JDK 8 升级 JDK 17 全流程教学指南

JDK 8 升级 JDK 17 首先已有项目升级是会经历一个较长的调试和自测过程来保证允许和兼容没有问题。先说几个重要的点 遇到问题别放弃仔细阅读报错&#xff0c;精确到每个单词每一行&#xff0c;不是自己项目的代码也要点进去看看源码到底是为啥报错明确你项目引入的包&#x…

【Transformer】自注意力机制Self-Attention | 各种网络归一化Normalization

1. Transformer 由来 & 特点 1.1 从NLP领域内诞生 "Transformer"是一种深度学习模型&#xff0c;首次在"Attention is All You Need"这篇论文中被提出&#xff0c;已经成为自然语言处理&#xff08;NLP&#xff09;领域的重要基石。这是因为Transfor…

word横向页面侧面页码设置及转pdf后横线变竖线的解决方案

在处理材料的时候&#xff0c;会遇到同一个文档里自某一页开始&#xff0c;页面布局是横向的&#xff0c;这时候页码要设置在侧面&#xff0c;方法是双击页脚&#xff0c;然后在word工具栏上选择“插入”——>“文本框”——>“绘制竖版文本框”&#xff0c;然后在页面左…

C++小游戏贪吃蛇源码

graphics.h是针对DOS下的一个C语言图形库 (c也可以) 目前支持下载此头文件的常用的有两种: 1. EGE (Easy Graphics Engine)2. EasyX Graphics LibraryEGE, 全名Easy Graphics Engine, 是windows下的简易绘图库&#xff0c;是一个类似BGI(graphics.h)的面向C/C语言新手的图形库…

P11-Transformer学习1.1-《Attention Is All You Need》

Transformer目录:《Transformer Paper》1.0 CV Transformer必读论文5篇_汉卿HanQ的博客-CSDN博客 前文参考:Transformer1.0-预热_汉卿HanQ的博客-CSDN博客 全文1w3字左右&#xff0c;按照论文翻译个人理解精读&#xff0c;如果对你有所帮助&#xff0c;欢迎点个赞哦&#xff…
最新文章