1.Zookeeper理论基础

1.Zookeeper的基本概念

是一个分布式应用协调框架 ,java编写的。客户端 /服务端 的架构模式。CP设计(一致性,分区容错)
它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:服务注册服务、状态同步服务、集群管理、分布式应用配置项的管理等。

2.重要特性

2.1文件系统数据结构
Zookeeper维护一个类似文件系统的数据结构:
在这里插入图片描述
每一个子目录项称为一个znode节点。与文件系统类似,可以增加、删除
znode,可以在一个znode下增加、删除子znode,为znode节点设置数据等。

2.1.1 znode类型 (默认创建持久化节点)
1)PERSISTENT ­持久化目录节点(持久节点)
客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,他将永远存在
2) PERSISTENT_SEQUENTIAL ­持久化顺序编号目录节点(持久有序节点)
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3)EPHEMERAL­ 临时目录节点(临时节点)
客户端与zookeeper断开连接后,该节点被删除,临时节点后面是不能再创建节点的。可以简单理解为连接的sessionId断开或者超时后,节点及节点的数据被删除,
4)EPHEMERAL_SEQUENTIAL­ 临时顺序编号目录节点(临时有序节点)
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
5.)Container 节点(3.5.3 版本新增,如果Container节点下面没有子节点,则Container节点在未来会被Zookeeper自动清除,定时任务默认60s 检查一次)容器节点)
6) TTL 节点( 默认禁用,只能通过系统配置 zookeeper.extendedTypesEnabled=true 开启。带有有效期时间的节点)

创建节点的命令:
create [‐s] [‐e] [‐c] [‐t ttl] path [data] [acl]
-s: 顺序节点
-e: 临时节点
-c: 容器节点
-t: 可以给节点添加过期时间,默认禁用,需要通过系统参数启用

//创建一个持久节点testnode  值为test1
create /testnode  test1
//创建一个有序持久节点,节点序号为/testnode0000000005  值为test1
create -s /testnode  test1
//创建一个有序临时节点,节点序号为/testnode0000000006  值为test1
create -s -e /testnode test1

在这里插入图片描述
临时节点序号为/testnode0000000006后面不能再创建节点。
失败反馈信息为:Ephemerals cannot have children: /testnode0000000006/node
在这里插入图片描述

2.2 节点监听通知watcher机制
特性为:一旦事件触发,对应的注册立刻被移除,所以事件监听是一次性的,还需要监听该节点,需要再次添加监听。所有的通知都是一次性的,只是事件通知,不是事件内容通知。
2.2.1 Zookeeper事件类型:
None: 连接建立事件
NodeCreated: 节点创建
NodeDeleted: 节点删除
NodeDataChanged:节点数据变化
NodeChildrenChanged:子节点列表变化
DataWatchRemoved:节点监听被移除
ChildWatchRemoved:子节点监听被移除

注册节点监听的命令:

get ‐w /path // 注册监听的同时获取数据
stat ‐w /path // 对节点进行监听,且获取元数据信息

下面的图示示例为 创建一个/watchnode节点,注册/watchnode节点的监听,然后修改/watchnode节点的值后,监听到的NodeDataChanged节点数据变化的事件。再次修改/watchnode节点的值,不会再有watcher监听触发(事件监听是一次性的)。
在这里插入图片描述

2.3 ZooKeeper 内存数据和持久化
Zookeeper数据的组织形式为一个类似文件系统的数据结构,而这些数据都是存储在内存中的,Zookeeper是一个基于内存的小型数据库
内存中的数据:
存放数据使用的ConcurrentHashMap,String key为节点的path。DataNode存放的是数据类型。包括数据值以及节点的信息。

public class DataTree {private final ConcurrentHashMap<String, DataNode> nodes =new ConcurrentHashMap<String, DataNode>();private final WatchManager dataWatches = new WatchManager();private final WatchManager childWatches = new WatchManager();
}

zookeeper事务日志:针对每一次客户端的事务操作,Zookeeper都会将他们记录到事务日志中,当然,Zookeeper也会将数据变更应用到内存数据库中。我们可以在zookeeper的主配置文件zoo.cfg 中配置内存中的数据持久化目录,也就是事务日志的存储路径 dataLogDir. 如果没有配置dataLogDir(非必填), 事务日志将存储到dataDir (必填项)目录。
zookeeper提供了格式化工具可以进行数据查看事务日志数据org.apache.zookeeper.server.LogFormatter。事务日志分别记录了操作时间,客户端会话ID,CXID,ZXID,操作类型,节点路径,节点数据(用
#+ascii 码表示),节点版本等。
事务日志文件名为: log.<当时最大事务ID>,应为日志文件时顺序写入的,所以这个最大事务
ID也将是整个事务日志文件中,最小的事务ID,日志满了即进行下一次事务日志文件的创建。

数据快照数据快照用于记录Zookeeper服务器上某一时刻的全量数据,并将其写入到指定的磁盘文件中。可以通过配置snapCount配置每间隔事务请求个数,生成快照,数据存储在dataDir 指定的目录中,可以通过如下方式进行查看快照数据( 为了避免集群中所有机器在同一时间进行快照,实际的快照生成时机为事务数达到 [snapCount/2 + 随机数(随机数范围为1 ~ snapCount/2 )] 个数时开始快照)

快照事务日志文件名为: snapshot.<当时最大事务ID>,日志满了即进行下一次事务日志文件的创建有了事务日志,为啥还要快照数据。快照数据主要时为了快速恢复, 事务日志文件是每次事务请求都会进行追加的操作,而快照是达到某种设定条件下的内存全量数据。所以通常快照数据是反应当时内存数据的状态。事务日志是更全面的数据,所以恢复数据的时候,可以先恢复快照数据,再通过增量恢复事务日志中的数据即可

zoo.conf 里配置的事务日志目录和数据快照目录 如下

dataDir=D:\\javaBeans\\zookeeper\\apache-zookeeper-3.9.1-bin\\data
dataLogDir=D:\\javaBeans\\zookeeper\\apache-zookeeper-3.9.1-bin\\log

本机中存在的文件样式分别为:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

ALV Grid 函数

ALV Grid 函数的输出有两个&#xff1a;REUSE_ALV_GRID_DISPLAY 和 REUSE_ALV_GRID_DISPLAY_LVC 两者的操作大同小异&#xff0c;只是后者能更好的和ALV容器结合使用&#xff0c;前后则不能&#xff1b;而在输入参数属性的结构上也有些差异。 本篇文章主要讲解下ALV函数中输入…

WordPress建站入门教程:忘记数据库名称、用户名和密码了怎么办?

有时候我们需要进入phpMyAdmin管理一些数据库&#xff0c;但是登录phpMyAdmin时却需要我们输入数据库的用户名和密码&#xff0c;但是我们不记得了应该怎么办呢&#xff1f; 其实&#xff0c;我们只需要进入WordPress网站根目录找到并打开wp-config.php文件&#xff0c;就可以…

vue2数据响应式原理解析

vue2与vue3区别浅析&#xff1a;vue2和vue3区别 浅析-CSDN博客 vue是mvvm框架&#xff0c;即“模型—视图—视图模型”&#xff0c;数据模式还是javascript对象&#xff0c;通过模型中应用程序数据和业务逻辑影响到视图的改变&#xff0c;视图(用户的操作)的改变会影响到底层数…

Git 进阶 高级用法,重要命令记录

本篇文章用于记录Git高级用法&#xff0c;新手可以看我的另一篇文章&#xff1a;Git基础教学。 Git git fetch 是git pull 的细分步骤&#xff0c;git pull 包含了git fetch git pull origin master 上述命令其实相当于git fetch git merge 在实际使用中&#xff0c;git fetc…

如何使用ArcGIS Pro进行坡度分析

坡度分析是地理信息系统中一种常见的空间分析方法&#xff0c;用于计算地表或地形的坡度&#xff0c;这里为大家介绍一下如何使用ArcGIS Pro进行坡度分析&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&…

uniapp报错:request:fail abort statusCode:-1 Chain validation failed

uniapp报错信息记录 场景: 半年没碰过的app&#xff0c;今个儿突然无法登录了。 打开控制台&#xff0c;报错信息如下 {msg: request:fail abort statusCode:-1 Chain validation failed}奇怪的是用 apifox 调用相关的接口&#xff0c;可以正常运行&#xff0c;app却不行。 好…

防坑指南!说说Six Sigma咨询公司排名的那些事

在企业管理领域&#xff0c;六西格玛&#xff08;Six Sigma&#xff09;已成为一种流行的质量管理方法。然而&#xff0c;面对众多的Six Sigma咨询公司&#xff0c;如何选择一家真正专业、有实力的合作伙伴&#xff0c;成为了许多企业面临的难题。本文&#xff0c;天行健咨询将…

高级语言讲义2019计专(仅高级语言部分)

1.编写函数&#xff0c;对给定的整数数组a&#xff08;数组长度和元素个数均为N&#xff09;进行判定&#xff1a;是否存在某个整数a[i]&#xff08;0<i<N&#xff09;&#xff0c;等于在其之前的所有整数的和 #include <stdio.h> #include <stdbool.h>bool…

编写 Ansible Playbooks

简介 简而言之&#xff0c;服务器配置管理&#xff08;也被广泛称为 IT 自动化&#xff09;是将基础设施管理转化为代码库的解决方案&#xff0c;描述了部署服务器所需的所有流程&#xff0c;并将其转化为一组可以进行版本控制和轻松重复使用的配置脚本。它可以极大地提高任何…

在训练过程中,如何动态调整哪些层被冻结或解冻

在训练过程中动态调整哪些层被冻结或解冻通常涉及到在训练的不同阶段改变模型参数的requires_grad属性。这可以通过编写一个自定义的训练循环或者利用深度学习框架提供的回调函数&#xff08;callbacks&#xff09;来实现。以下是一些可能的方法&#xff1a; 自定义训练循环: 在…

JVM相关知识

JVM相关知识 &#x1f333;1.JVM概述&#x1fab4;1.1 JVM作用:&#x1fab4;1.2JVM构成&#x1fab4;1.3JVM整体结构图 &#x1f333;2.类加载子系统&#x1fab4;2.1作用&#x1fab4;2.2类加载过程&#x1f331;2.2.1加载:&#x1f331;2.2.2连接&#x1f331;2.2.3初始化 &…

浅谈 Vue3 静态提升和预字符串化

前言 很多朋友在看到 Vue3静态提升 的时候很不理解&#xff0c;不明白这句话到底是什么意思&#xff0c;今天我们就通过这篇日记来搞明白。如果有什么地方描述不正确&#xff0c;请多多指正。 静态类型&#xff08;前置信息&#xff09; 判断节点是否为静态类型&#xff0c;…

【BUUCTF Misc】通关 3.0

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

利用GPT开发应用001:GPT基础知识及LLM发展

文章目录 一、惊艳的GPT二、大语言模型LLMs三、自然语言处理NLP四、大语言模型LLM发展 一、惊艳的GPT 想象一下&#xff0c;您可以与计算机的交流速度与与朋友交流一样快。那会是什么样子&#xff1f;您可以创建哪些应用程序&#xff1f;这正是OpenAI正在助力构建的世界&#x…

Qt多弹窗实现包括QDialog、QWidget、QMainWindow

1.相关说明 独立Widget窗口、嵌入式Widget、嵌入式MainWindow窗口、独立MainWindow窗口等弹窗的实现 相关界面包含关系 2.相关界面 3.相关代码 mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include "tformdoc.h" #incl…

理解CPU指令执行:从理论到实践

理解CPU指令执行&#xff1a;从理论到实践 在探讨现代计算机的核心——中央处理单元&#xff08;CPU&#xff09;的工作原理时&#xff0c;我们经常遇到“时钟周期”和“指令执行”这两个概念。这些概念不仅对于理解CPU的性能至关重要&#xff0c;而且对于揭示计算机如何处理任…

挑战杯 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

羊大师揭秘,羊奶有哪些好处和不足呢?

羊大师揭秘&#xff0c;羊奶有哪些好处和不足呢&#xff1f; 羊奶的好处主要包括&#xff1a; 营养丰富&#xff1a;羊奶中含有多种人体所需的营养成分&#xff0c;如蛋白质、脂肪、碳水化合物、矿物质和维生素等。尤其是蛋白质含量高&#xff0c;且易于人体吸收利用。 增强免…

Spring——Bean的作用域

bean的作用域 Bean Scope Scope说明singleton&#xff08;默认情况下&#xff09;为每个Spring IoC容器将单个Bean定义的Scope扩大到单个对象实例。prototype将单个Bean定义的Scope扩大到任何数量的对象实例。session将单个Bean定义的Scope扩大到一个HTTP Session 的生命周期…

Unity用Shader将一张图片变成描边图片素描风格。

环境&#xff1a; unity2021.3.x 效果&#xff1a; 实现核心思路(shader)&#xff1a; fixed4 frag (v2f i) : SV_Target {fixed4 col tex2D(_MainTex, i.uv);// 调整相似度bool isRedMatch abs(col.r - _TargetColor.r) < 0.15;bool isGreenMatch abs(col.g - _Target…