zookeeper基础内容

文章目录

  • Zookeeper基础
    • 概述
    • 数据结构
    • Zookeeper节点操作
    • zookeeper节点操作命令
    • 数据模型 znode 结构
  • zookeeper java客户端
    • ZooKeeper原生API
    • Curator
    • zkClient
    • 对比总结

Zookeeper基础

概述

  • zookeeper(分布式协调服务) 本质:小型的文件存储系统+监听通知机制
  • ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册
  • ZooKeeper 的架构通过冗余服务实现高可用性(CP)[CAP:一致性、可用性、分区容错性](最终一致性)。
  • Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单
    易用的接口提供给用户使用。
    一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式
    协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功

数据结构

  • zookeeper本身是一个树形目录服务(名称空间),非常类似于标准文件系统,key-value 的形式存储。名称 key 由斜线 / 分
    割的一系列路径元素,zookeeper 名称空间中的每个节点都是由一个路径来标识的。
    在这里插入图片描述
  • 每个路径下的节点key(完整路径,名称)是唯一的,即同一级节点 key 名称是唯一的
  • 每个节点中存储了节点value和对应的状态属性
    在这里插入图片描述

Zookeeper节点操作

在这里插入图片描述

zookeeper节点操作命令

在这里插入图片描述

数据模型 znode 结构

在这里插入图片描述

zookeeper java客户端

  1. zookeeper 原生API:session不支持超时重连,watch监听需要进行反复注册、不支持对节点的递归操作
  2. Curator:提供各个场景的实现,提供了一套fluent风格的API调用
  3. zkClient:几乎没有参考文档,异常处理简化,没有提供各个场景对应的实现

ZooKeeper原生API

  • ZooKeeper原生API是Apache ZooKeeper项目自带的Java客户端库。它提供了连接ZooKeeper集群并执行基本操作的功能。虽然它足够灵活,但在处理复杂的分布式系统任务时可能显得有些繁琐。
  • 优点:
    • 官方支持,与ZooKeeper项目保持一致。
    • 原生API直接暴露ZooKeeper的底层操作,可以更好地理解ZooKeeper的工作原理。
  • 缺点:
    • 使用复杂,需要处理连接管理、会话超时等底层细节。
    • 需要手动编写一些常见的模式(例如分布式锁、队列)。

Curator

  • Curator是Netflix开发的一个基于ZooKeeper的高级客户端库。它构建在ZooKeeper原生API之上,简化了许多常见任务的实现,如分布式锁、选举、缓存和Leader选举等。
  • 优点:
    • 提供了高级别的抽象,简化了ZooKeeper的使用。
    • 包含了一系列常见的分布式系统模式的实现,如分布式锁、队列等。
    • 提供了更多的错误处理机制和易用性改进。
  • 缺点:
    • 引入了额外的依赖,增加了项目的复杂性。
    • 概念相对较多,学习曲线较陡。

zkClient

  • zkClient是Apache Kafka项目中的一个ZooKeeper客户端库。它提供了一些高级别的API,简化了ZooKeeper的连接和操作。
  • 优点:
    • 相对于ZooKeeper原生API,zkClient提供了更高级别的抽象。
    • 更容易上手,相对于Curator,zkClient的概念和学习曲线较为简单。
  • 缺点:
    • 社区支持相对较少。
    • 功能相对较为有限,对于某些复杂场景可能不够灵活。

对比总结

特性ZooKeeper原生APICuratorzkClient
抽象级别较低
复杂度较高较高
功能完备性一般一般
社区支持Apache官方支持Netflix支持相对较少
学习曲线陡峭陡峭平缓

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

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

相关文章

寄存器、缓存、内存、硬盘、存储器的理解

https://blog.csdn.net/heixiaolong7/article/details/51226378 只要能存储数据的器件都可以称之为存储器,它的含义覆盖了寄存器,缓存,内存,硬盘。cpu访问快慢的速度依次为 寄存器-> 缓存->内存->硬盘 寄存器是中央处…

Springboot内置Tomcat线程数优化

Springboot内置Tomcat线程数优化 # 等待队列长度,默认100。队列也做缓冲池用,但也不能无限长,不但消耗内存,而且出队入队也消耗CPU server.tomcat.accept-count1000 # 最大工作线程数,默认200。(4核8g内存…

Spring 的缓存机制【记录】

一、背景 在最近的业务需求开发过程中遇到了“传说中”的循环依赖问题,在之前学习Spring的时候经常会看到Spring是如何解决循环依赖问题的,所谓循环依赖即形成了一个环状的依赖关系,这个环中的某一个点产生不稳定变化都会导致整个链路产生不…

OpenCV-opencv下载安装和基本操作

文章目录 一、实验目的二、实验内容三、实验过程OpenCV-python的安装与配置python下载和环境配置PIP镜像安装Numpy安装openCV-python检验opencv安装是否成功 openCV-python的基本操作图像输入和展示以及写出openCV界面编程单窗口显示多图片鼠标事件键盘事件滑动条事件 四、实验…

唯创知音WTN6080-8S语音芯片在咖啡机中的应用:增添声音魅力,提升用户体验

在快节奏的现代生活中,咖啡机已成为许多家庭和办公室的必备设备,为人们提供了便捷和高品质的咖啡享受。然而,对于很多用户来说,操作咖啡机可能是一项复杂而棘手的任务。为了解决这一难题,唯创知音WTN6080-8S语音芯片被…

Altman作了多少恶?排挤首席科学家出GPT5开发、离间董事会、PUA员工

在山姆奥特曼(Sam Altman)被OpenAI董事会突然解职后的几天里,这个消息在科技圈引发轰动,该公司内部员工和许多科技界人士甚至将此举比作一场政变。 奥特曼被解雇后立即传出的说法是,OpenAI的广大员工都很喜欢他&#x…

一入一出模拟量两线制无源 4-20mA隔离变送器

一入一出模拟量两线制无源 4-20mA隔离变送器 特征与应用: ◆薄体积,低成本,国际标准 DIN35mm 导轨安装方式 ◆两端隔离(输入、输出间相互隔离) ◆单通道输入单通道输出 ◆高精度等级(0.1%,0.2% F.S) ◆高线性度(0.1% F.S) ◆高隔离电压(3000…

32位ADC布局的指导方针

接地必须是一个低阻抗连接,以使回流电流不受干扰地流回各自的源。接地面连接尽量短且直。使用过孔连接接地线时,应并联多个过孔,以减小对地阻抗。 混合信号布局有时包含在一个位置捆绑在一起的单独的模拟和数字地平面;但是,当模拟…

活动回顾 | 菊风亮相 GTC2023 全球流量大会

2023年12月5日-12月6日,由白鲸出海主办的【GTC2023 全球流量大会】在中国深圳盛大召开。 本次大会荟聚海内外优质企业品牌,以专业的“展会”形式,全方位呈现跨境出海的成果,探索多元化的跨境商业模式,大会涵盖社交娱乐…

【Jeecg Boot 3 - 第二天】1.1、后端 docker-compose 部署 JEECGBOOT3

一、场景 二、实战 ▶ 2.1 修改配置文件 > 目的一:将 dev 变更为生产环境 prod > 目的二:方便spring项目调用docker同个network下的redis和mysql ▶ 2.2 编写dockerfile ▶ 2.3 编写docker-compose.yaml ▶ 2.4 打…

Qt/C++音视频开发59-使用mdk-sdk组件/原qtav作者力作/性能凶残/超级跨平台

一、前言 最近一个月一直在研究mdk-sdk音视频组件,这个组件是原qtav作者的最新力作,提供了各种各样的示例demo,不仅限于支持C,其他各种比如java/flutter/web/android等全部支持,性能上也是杠杠的,目前大概…

cadence中如何在更新原理图封装

cadence中如何在更新原理图封装 一、更改原理图封装 当原理图画好后,如果我们发现某个封装错了,需要改动,需要找到你最初画Library中器件封装文件打开,进行修改,修改好后保存。 二、更新封装 保存好后,…

C/C++ 有效的字母异位词

题目: 给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。 注:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true …

2024年广西职业院校技能大赛中职组《网络安全》赛项样题

2024年广西职业院校技能大赛 中职组《网络安全》赛项样题 目录 任务一 登录安全加固 任务二 数据库加固(Data) 任务三 Web安全加固(Web) 任务四 流量完整性保护(Web,Data) 任务五 事件监控 任务一 应急响应 任务二 …

295. 数据流的中位数

二分法实现 295. 数据流的中位数 295. 数据流的中位数 本题的第一个难点,要自己构造一个类(因为个人构造类的题目做的较少) 属性: 数组的长度int 数组的数据结构 List保证原数组是一个有序数组,我使用了二分查找插入新…

【IDEA】反向撤销操作快捷键 ctrl+shift+z 和搜狗热键冲突的解决办法

当我们执行某些操作时与搜狗热键冲突,直接取消搜狗的快捷键即可!!!以下以 ctrlshiftz 为例。 在输入悬浮框右键找到更多设置 按键里面找到系统功能快捷键设置 取消掉冲突的热键即可

​gzip --- 对 gzip 格式的支持​

源代码: Lib/gzip.py 此模块提供的简单接口帮助用户压缩和解压缩文件,功能类似于 GNU 应用程序 gzip 和 gunzip。 数据压缩由 zlib 模块提供。 gzip 模块提供 GzipFile 类和 open()、compress()、decompress() 几个便利的函数。GzipFile 类可以读写 gz…

Codeforces Round 911 (Div. 2)

Codeforces Round 911 (Div. 2) A 有大于3的区间就可以无限取水&#xff0c;答案为2&#xff0c;其他的按照个数 #include <bits/stdc.h>using namespace std;void solve() {int n, k 0;cin >> n;string s, t "...";cin >> s;auto it search…

ARM day6

2.串口发送指令控制硬件工作 结果&#xff1a; uart.h #ifndef __UART_H__ #define __UART_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_uart.h"void myuart4_init(); void myputchar(char i); cha…

element-ui基本使用

基本使用&#xff1a;npm i element-uimain.js&#xff1a;/*** 该文件是整个项目的入口文件*/ import Vue from vue; import App from ./App.vue; import ElementUI from element-ui; // 引入Element全部样式 import element-ui/lib/theme-chalk/index.css;// 关闭vue的生产提…