zookeeper学习(一)zk特性与节点数据类型详解(2022)

news2024/11/25 21:17:26

Zookeeper是一个开源的分布式协调框架,主要用来解决分布式集群中应用系统的一致性问题。从设计模式角度来理解其实zk是一个基于观察者模式设计的分布式服务管理框架。

CAP理论:

cap理论指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性:在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性,等同于所有节点访问同一份最新的数据副本。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍处于一致的状态。
  • 可用性:每次请求都能获取到正确的响应,但是不保证获取的数据为最新数据。
  • 分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

zookeeper保证的CP,eureka是AP ,redis是AP

BASE理论:

base是Basically Available(基本可用)、Soft-state(软状态)和Eventually Consistent(最终一致性)

  • 基本可用:在分布式系统出现故障,允许损失部分可用性(服务降级、页面降级)
  • 软状态:允许分布式系统出现中间状态,而且中间状态不影响系统的可用性,这里的中间状态是指不同的数据备份节点之间的数据更新可以出现延时的最终一致性。
  • 最终一致性:数据备份节点之间经过一段时间达到一致性。

BASE理论是对CAP中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

强一致性:任意时刻,所有节点中的数据是一样的,一个集群需要对外部提供强一致性,所以只要集群内部某一台服务器的数据发生了改变,那么就需要等待集群内其他服务器的数据同步完成后才能正常对外提供服务;保证了强一致性,务必会损耗可用性。

弱一致性:系统中的某个数据被更新后,后续对该数据的读取操作可能得到更新后的值,也可能是更改前的值,即使过了不一致时间窗口,后续的读取也不一定能保证一致。

最终一致性:弱一致性的特殊形式,不保证在任意时刻任意节点上的同一份数据是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。

顺序一致性:任何一次读都能读到某个数据的最近一次写的数据。对其他节点之前的修改是可见且确定的,并且新的写入建立在已经达成同步的基础上。

Zookeeper写入是强一致性,读取是顺序一致性。

zk数据结构:

zk数据模型结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称作一个ZNode

 zk数据模型是层次模型,层次模型和key-value模型是两种主流的数据模型,zk使用文件系统模型主要基于以下两点考虑:

  1. 文件系统的树形结构便于表达数据之间的层次关系
  2. 文件系统的树形结构便于为不同的应用分配独立的命名空间,每个节点都可以保存数据,每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识,每个节点都有一个版本,版本从0开始计数。

Zookeeper安装

zookeeper下载安装方式可以看这一篇文章:linux环境安装zookeeper(一)_酒书的博客-CSDN博客

在启动zk的时候如果报了这个错就是没有jdk环境,需要先装一下jdk环境,可以参考下面这篇文章

linux安装jdk和tomcat_酒书的博客-CSDN博客_linux 安装jdk和tomcat

有了jdk环境启动zk成功

通过命令查看zk状态bin/zkServer.sh status

 然后启动zkClient连接zk server,使用命令bin/zkCli.sh -server ip:端口

zookeeper节点分类:

1、持久节点(PERSISTENT):这样的znode在创建之后即使发生zk集群宕机或者client宕机也不会丢失。

2、临时节点(EPHEMERAL):client宕机或者client在指定的timeout时间内没有给zk集群发消息,这样的znode就会消失。

3、持久顺序节点(PERSISTENT_SEQUENTIAL):znode除了具备持久性znode的特点之外,znode的名字具备顺序性。

4、临时顺序节点(EPHEMERAL_SEQUENTIAL):znode除了具备临时性znode的特点之外,znode的名字具备顺序性。

5、Container节点(3.5.3版本新增):Container容器节点,当容器中没有任何子节点,该容器节点会被zk定期删除(定时任务默认60s检查一次)。和持久节点的区别是zk服务端启动后,会有一个单独的线程去扫描所有的容器节点,当发现容器节点的子节点数量为0时,会自动删除该节点。可以用于leader或者锁场景中。

# 创建容器节点
create c / container xxx

6、TTL节点:带过期时间节点,默认禁用,需要在zoo.cfg中添加extendedTypesEnabled=true开启,注意TTL不能用于临时节点

# 创建 ttl节点: create t 10 / ttl

zookeeper节点特性总结

1、同一级节点key名称是唯一的

 2、创建节点时,必须要带上全路径

3、session关闭,临时节点清除

4、watch机制,监听节点变化

事件监听机制类似于观察者模式,watch流程是客户端向服务端某个节点路径上注册一个watcher,同时客户端也会存储特定的watcher,当节点数据或子节点发生变化时,服务端通知客户端,客户端进行回调处理。

5、delete命令只能一层一层删除。提示:新版本可以通过deleteall命令递归删除

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

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

相关文章

COMSOL泰森多边形Voronoi图多孔骨架优化模型受力分析

Voronoi模型 在comsol内建立泰森多边形骨架支撑网格,模型采用一般的多边形泰森多边形孔隙以及样条曲边泰森多边形孔隙做对比研究,分析模型在承受压力荷载下的应力分布。通过comsol的固体力学计算可看出拟圆形Voronoi孔隙支撑结构的应力分布更为合理&…

【LIMU-Bert论文阅读】

LIMU-BERT: Unleashing the Potential of Unlabeled Data for IMU Sensing Applications 题目重点: 充分利用无标签数据适用于IMU传感器应用(并没有指出specfic task) 文章核心: 如何根据IMU数据的特征设计出LIMU-Bert&#xff0c…

基于模糊逼近系统不确项的滑模自适应控制

目录 前言 1.系统描述 2.控制器设计 3.模糊推理估计不确定f 3.1构造模糊系统 3.2模糊推理过程 3.3 自适应律设计 4.仿真分析 4.1仿真模型 4.2仿真结果 5.总结 前言 在一般的建模仿真中,我们假设模型都是可以用数学模型描述出来的是确定的,称…

1. 一些截图方法的比较;2. 将截图直接转换为PDF并拼接,与插入Word后再转换为PDF的对比

1. 一些截图方法的比较 1.1. 有时候当某个软件没有导出功能,或者导出功能受限,比如 tableau public,但又需要获取展示出的可视化信息时,就需要用到截图。如果这些截图还要用在正式文档中,就需要是高清的,至…

Python预测卡塔尔世界杯身价最高的英格兰要夺冠?!

文章目录🏳️‍🌈 1. 数据🏳️‍🌈 2. 绘图2.1 绘制表头2.2 绘制排名、球队以及国旗2.3 绘制身价柱状图2.4 绘制FIFA排名散点图2.5 设置背景2.6 设置标题🏳️‍🌈 3. 更多可视化项目源码数据:大…

关于 find 命令的15个超级有用的例子

find 命令用于在 Linux 命令行中搜索文件和目录。 find 是功能最强大、使用最频繁的命令之一,同时也是选项最多的命令之一,它有50多个选项,很容易让人弄混了,特别是当它与 exec 或 xargs 命令一起使用的时候。 作为系统管理员或…

AI创作教程之 如何在本地 PC 上运行稳定的 Diffusion 2.0 (无代码指南)

AI 的热门图像生成器 Stable Diffusion日前发布了全新的 2.0版本。新版本比以前的版本带来了许多进步和改进。OpenCLIP 中新的深度检测和更好的文本到图像模型是我最兴奋的功能。 查看本文以查看 SD 2.0 中新增功能的完整列表。 在本文中,我将向您展示如何在本地 PC 上试用新…

PHP基于thinkphp的在线教学网站#毕业设计

在线教学系统采用B/S模式,促进了在线教学系统的安全、快捷、高效的发展。传统的管理模式还处于手工处理阶段,管理效率极低,随着用户的不断增多,传统基于手工管理模式已经无法满足当前用户需求,随着信息化时代的到来&am…

DataFrame API入门操作及代码展示

文章目录DataFrame风格编程DSL风格编程代码示例相关API相关代码示例SQL风格编程代码示例相关API相关代码Fucntions包基于SparkSQL的WordCount代码编写DataFrame风格编程 DataFrame支持两种风格进行编程 DSL风格SQL风格 DSL称之为领域特定语言,其实就是指DataFrame特…

Config配置文件读写

配置文件本质上是包含成功操作程序所需信息的文件,这些信息以特定方式构成。它们不是在程序中进行硬编码,而是用户可配置的,通常存储在纯文本文件中。 写配置文件 使用函数WritePrivateProfileStringW写配置文件 BOOL WritePrivateProfile…

filter: grayscale(1); | 网页变灰

效果 MDN: https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter-function/grayscalegrayscale(amount)对图片进行灰度转换转换值的大小,可以是 或 . 当值为 100% 时,灰度最大。0% 时与原图没有区别。0% 到 100% 之间的值会使灰度线性变化。amount …

JVM学习笔记(2)—— 运行时数据区概述及线程

在上一篇中我们讲了JVM的类加载子系统,现在我们就来到了运行时数据区。而不同版本的JVM对于内存的划分方式和管理机制存在着部分差异(最典型的就是方法区实现的差异),本文针对经典的Hotspot jvm进行讨论,对运行时数据区…

Mongoose应用和文件上传

一、Express框架访问MongoDB数据库 1、目的: ​ (1)mongoose模块的使用 ​ (2)学会代码的封装:dao层、service层、接口层 ​ (3)MVC设计思想:M(Model)、V(View)、C(C…

WEB前端期末大作业——关于酒店主题网站设计——高级酒店公寓网页(4页)

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

如何使用gitee码云?创建库,克隆远程仓库,上传代码,小绿格等问题

目录 前提软件:先安装Git,再安装TortoiseGit(可以在网上找找~默认下一步安装即可) 一、访问网站Gitee - 基于 Git 的代码托管和研发协作平台 二、创建库 二、克隆远程仓库到本地电脑 - 仓库与本地链接 三、上传文件到gitee库里…

【Linux基础知识点】内核、系统调用、Shell、指令集、微架构、硬件架构、用户态、内核态、进程、用户线程、内核线程

参考 Linux内核版本和发行版本Linux架构用户态和内核态的简单理解「建议收藏」CPU、操作系统内核、ARM内核与架构的理解【科普】一文看懂指令集是什么一文搞懂X86架构和ARM架构的区别线程和进程的区别是什么?如何理解内核线程、内核进程? 讲解 知识点详…

Linux 业务突然宕机、系统卡死、磁盘空间爆满,该怎么查?

场景 在服务器运维过程中,我们偶尔会发现业务突然宕机,进去服务器发现异常卡顿查看服务器磁盘空间发现磁盘满载。 如何找到占用空间大的目录或文件? 1、比较笨的方法: 在根目录下,du -hs命令,列出各目录…

Redis缓存问题

目录 1、缓存穿透 2、缓存击穿 3、缓存雪崩 ​​​​​​​4、Redis的并发竞争key问题 ​​​​​​​1、缓存穿透 大量请求缓存中和数据库不存在的数据。 大量用户请求缓存中和数据库中不存在的数据,导致所有请求都落到数据库上,造成数据库短时间内承…

GAMES202 Real-Time Global Illumination

文章目录Lecture 7 Real-time Global Illumination (in 3D)RSM (Reflective Shadow Maps)Lecture 8 Real-time Global Illumination (screen space)LPV (Light Propagation Volumes)VXGI (Voxel Global Illumination)SSAO (Screen Space Ambient Occlusi…

零基础如何入门Web性能测试?

1、目前正在研究jmeter,请问初期做性能,应先从几点做起? Jmeter和LR都是目前性能测试的首选工具,如果你有LR的学习背景,那么Jmeter上手会很快,重点理解线程和进程的概念,流程和LR是类似的。如果…