1.Zookeeper理论基础

news2024/11/26 16:17:57

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.coloradmin.cn/o/1492711.html

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

相关文章

对于爬虫的学习

本地爬取 package MyApi.a08regexdemo;import java.util.regex.Matcher; import java.util.regex.Pattern;public class RegexDemo03 {public static void main(String[] args) {//要求&#xff1a;找出里面所有javaxxString str"Java自从95年问世以来&#xff0c;经历了…

爬虫逆向网站案例

一、相关网页 东方财富人气排行榜 二、查找url 三、寻找curl并复制 四、打开Convert curl commands to code (curlconverter.com) 五、修改并执行代码 import requestscookies {st_si: 73974981954644,st_pvi: 39724919122964,st_sp: 2024-03-05%2018%3A27%3A22,st_inirUrl:…

基于java springboot+redis网上水果超市商城设计和实现以及文档

基于java springbootredis网上水果超市商城设计和实现以及文档 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留…

算法Day04_203.移除链表元素

推荐阅读 算法day01_ 27. 移除元素、977.有序数组的平方 算法day02_209.长度最小的子数组 算法day03_ 59.螺旋矩阵II 目录 推荐阅读203.移除链表元素题目思路解法暴力解法虚拟头结点解法 203.移除链表元素 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删…

深度学习预测分析API:金融领域的Game Changer

&#x1f680; 引言 在这个AI遍地开花的时代&#xff0c;谁能成为金融领域的真正Game Changer&#xff1f;那必然是是深度学习预测分析API。如大脑般高效运转的系统不仅颠覆了传统操作&#xff0c;更是以无与伦比的速度和精度赋予了金融数据以全新的生命。 &#x1f4bc; 广泛…

flutter小程序开发,Android高级工程师必备知识

AWTK 主要特色&#xff1a; 1、跨平台 AWTK 是跨平台的&#xff0c;这有两个方面的意思&#xff1a; AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorks、Windows、Linux、MacOS、嵌入式 Linux、Android、Web 和嵌入式裸系统&#xff0c;可以轻松的移植到各种 RTOS 上。AWT…

缓存一致性:数据库操作与Redis事务回滚

缓存一致性&#xff1a;数据库操作与Redis事务回滚 今日开发需求是“保证数据库操作与Redis缓存操作的一致&#xff0c;在CRUD出错时&#xff0c;保证回滚”。 问题&#xff1a; 1、数据库开启事务&#xff0c;即可在操作失误时&#xff0c;回滚之前的已经做过的操作&#xff…

厚膜功率电阻基板选择

根据电阻器性能规格和应用的全部细节&#xff0c;专业制造商将选择最合适的厚膜功率电阻器基板技术&#xff0c;以适当的成本提供可靠的解决方案。 正确的电阻基板材料选择可以最大限度地提高散热效果并减小元件尺寸。这必须与材料成本和制造过程中的潜在复杂性进行权衡。 基板…

制作Python游戏全过程(汇总2)

目录 前言: 1.基于pygame库创建游戏模块: 1.1引入模块 1.1.1 这是对代码的解释: 1.1.1.1pygame 是一个用于创建游戏的 Python 库。 1.1.1.2plane_sprites 是一个自定义模块&#xff0c;从day6文件夹(也可以是其他的文件夹)中导入&#xff0c;它可能包含了游戏中使用的所有…

Android 消息恢复 - 如何在 Android 上检索已删除的短信

最新调查显示&#xff0c;手机每天发送和接收的短信数以亿计&#xff0c;尤其是Android智能手机。但与此同时&#xff0c;Android消息丢失也每天都在发生。因此&#xff0c;如何恢复Android手机上已删除的短信对于那些在设备中保存了一些重要信息的人来说似乎非常重要。 在这里…

【组合递归】【StringBuilder】Leetcode 17. 电话号码的字母组合

【组合递归】【StringBuilde】Leetcode 17. 电话号码的字母组合 StringBulider常用方法&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;17. 电…

第六篇:人工智能与机器学习技术VS数据迁移(Data Migration)--- 我为什么要翻译介绍美国人工智能科技巨头IAB公司?

(source: 图片来自麻省理工官网&#xff09; IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;…

Unreal Engine5记录 01安装

1.下载Epic Games 启动器 官网下载地址 传送门https://www.unrealengine.com/zh-CN 点击下载启动程序&#xff0c;完成之后选择指定的路径安装即可。 2.登录或注册一个账户 多种登录方式&#xff0c;选择一种登录即可。 3.找到虚幻引擎下载列表 选择想要的版本进行下载&…

LeetCode——二叉树(Java)

二叉树 简介[简单] 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历二叉树层序遍历[中等] 102. 二叉树的层序遍历[中等] 107. 二叉树的层序遍历 II[中等] 199. 二叉树的右视图[简单] 637. 二叉树的层平均值[中等] 429. N 叉树的层序遍历[中等] 515. 在每个…

微信小程序开发系列(十七)·事件传参·mark-自定义数据

目录 步骤一&#xff1a;按钮的创建 步骤二&#xff1a;按钮属性配置 步骤三&#xff1a;添加点击事件 步骤四&#xff1a;参数传递 步骤五&#xff1a;打印数据 步骤六&#xff1a;获取数据 步骤七&#xff1a;父进程验证 总结&#xff1a;data-*自定义数据和mark-自定…

Doris实战——金融壹账通指标中台的应用实践

目录 前言 一、业务痛点 二、早期架构挑战 三、架构升级 四、一体化指标数据平台 4.1 构建指标体系 4.2 构建指标平台功能 五、Doris指标应用实践 六、未来规划 原文大佬的这篇指标中台的应用实践有借鉴意义&#xff0c;这里摘抄下来用作学习和知识沉淀。 前言 在搭建…

python+django_vue旅游酒店预订出行订票系统pycharm项目lw

a.由于对管理信息方面的内容了解尚浅且没有足够的经验&#xff0c;因而很难对数据庞大的线上旅行信息管理系统建立完善的数据库。 b.线上旅行信息管理系统拥有很大的信息量&#xff0c;其中包括数据库的前期开发和后期更新&#xff0c;因此对数据库的安全性&#xff0c;一致性和…

CVE-2020-8835:eBPF verifier 整数截断导致的越界读写

文章目录 前言漏洞分析do_check 函数 漏洞利用漏洞触发越界读实现地址泄漏越界写实现任意读越界写实现任意写 exp 即效果演示参考 前言 影响版本&#xff1a;v5.4.7 ~ v5.5.0 以及更新的版本&#xff0c;如 5.6 编译选项&#xff1a;CONFIG_BPF_SYSCALL&#xff0c;config 所有…

Vue基础入门(4)- Vuex的使用

Vue基础入门&#xff08;4&#xff09;- Vuex的使用 Vuex 主要内容&#xff1a;Store以及其中的state、mutations、actions、getters、modules属性 介绍&#xff1a;Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;Vuex 是一个插件&#xff…

网站维护页面404源码

网站维护页面404源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 下载地址 https://www.qqmu.com/2407.html