当前位置: 首页 > news >正文

Zookeeper底层原理

ZooKeeper 是一个高可用的分布式协调服务,广泛应用于分布式系统中,用于解决分布式系统的一致性问题。下面将详细介绍 ZooKeeper 的底层原理,包括其架构、数据模型、核心机制和一致性协议等方面。

1. 架构

ZooKeeper 采用主从架构(Master-Slave),通常由一个 Leader 和若干个 Follower 组成,还有 Observer 节点作为非投票节点,用于分担读请求的压力。

  • Leader:负责处理所有写请求(事务请求)和协调一致性协议。
  • Follower:参与投票选举和同步 Leader 的状态,处理读请求。
  • Observer:不参与投票选举,仅处理客户端的读请求和转发写请求。

2. 数据模型

ZooKeeper 以类似文件系统的树形结构存储数据,每个节点称为 znode。

  • znode:数据节点,具有路径、数据和状态信息。
  • 持久节点(Persistent znode):节点在客户端断开后依然存在,除非被显式删除。
  • 临时节点(Ephemeral znode):节点在客户端断开连接时自动删除。
  • 顺序节点(Sequential znode):节点在创建时自动附加一个递增的序列号。

3. 核心机制

3.1. 会话管理

每个客户端与 ZooKeeper 集群之间建立一个会话,用于维持连接状态和管理临时节点。ZooKeeper 通过心跳机制检测客户端的连接状态,如果在一定时间内未收到心跳,认为会话断开。

3.2. 数据同步

为了保证各个节点的数据一致性,ZooKeeper 采用了数据同步机制。Leader 节点在处理写请求时,会将变更操作发送给所有 Follower 节点,Follower 节点在接受变更操作后进行确认,最终由 Leader 节点决定变更操作是否成功。

3.3. 通知机制

ZooKeeper 支持 Watch 机制,客户端可以在指定的 znode 上注册 Watch,当该 znode 的数据或子节点发生变更时,ZooKeeper 会通知客户端。

4. 一致性协议

ZooKeeper 使用一种称为 ZAB(Zookeeper Atomic Broadcast)的一致性协议来保证数据的一致性。ZAB 包括两个阶段:选举阶段和广播阶段。

4.1. 选举阶段

当 ZooKeeper 集群启动时,或 Leader 节点故障时,需要进行选举以确定新的 Leader。选举阶段主要分为以下几步:

  1. 投票:所有节点都投票给自己,并将投票发送给其他节点。
  2. 接收投票:各节点接收到其他节点的投票,并统计投票结果。
  3. 更新投票:如果接收到的投票中有票数比自己高的候选人,则更新投票给该候选人。
  4. 确定 Leader:当某个候选人获得超过半数以上的投票时,成为新的 Leader。
4.2. 广播阶段

在 Leader 确定后,进入广播阶段,Leader 负责处理客户端的写请求,并将变更操作广播给所有 Follower 节点。具体步骤如下:

  1. 提案:Leader 接收到写请求后,生成一个提案,并将提案发送给所有 Follower 节点。
  2. 确认:Follower 节点接收到提案后,进行日志记录,并向 Leader 发送确认消息。
  3. 提交:Leader 节点接收到超过半数以上的确认消息后,提交该提案,并将提交结果通知所有 Follower 节点。
  4. 应用变更:Follower 节点接收到提交通知后,应用变更操作。

5. 示例代码

下面是使用 ZooKeeper 的一个简单示例,展示如何创建节点、读取节点数据和注册 Watch。

5.1. 引入依赖

pom.xml 中引入 ZooKeeper 客户端依赖。

 

xml复制代码

<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.3</version> </dependency>

5.2. 创建节点和读取数据
 

java复制代码

import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.ZooDefs; import org.apache.zookeeper.KeeperException; import java.io.IOException; public class ZookeeperExample { private static final String ZK_ADDRESS = "localhost:2181"; private static final int SESSION_TIMEOUT = 3000; public static void main(String[] args) throws IOException, KeeperException, InterruptedException { // 创建 ZooKeeper 客户端 ZooKeeper zk = new ZooKeeper(ZK_ADDRESS, SESSION_TIMEOUT, new Watcher() { @Override public void process(WatchedEvent event) { System.out.println("Event: " + event.getType()); } }); // 创建节点 String path = "/example"; byte[] data = "Hello ZooKeeper".getBytes(); if (zk.exists(path, false) == null) { zk.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } // 读取节点数据 byte[] retrievedData = zk.getData(path, false, null); System.out.println("Data: " + new String(retrievedData)); // 注册 Watch zk.getData(path, new Watcher() { @Override public void process(WatchedEvent event) { System.out.println("WatchedEvent: " + event.getType()); } }, null); // 修改节点数据,触发 Watch zk.setData(path, "New Data".getBytes(), -1); // 关闭 ZooKeeper 客户端 zk.close(); } }

总结

ZooKeeper 作为一个分布式协调服务,通过其主从架构、树形数据模型、会话管理、数据同步、通知机制和 ZAB 一致性协议,提供了高可用和一致性的分布式协调服务。理解 ZooKeeper 的底层原理和实现,有助于更好地应用它来解决分布式系统中的一致性问题。

相关文章:

Zookeeper底层原理

ZooKeeper 是一个高可用的分布式协调服务&#xff0c;广泛应用于分布式系统中&#xff0c;用于解决分布式系统的一致性问题。下面将详细介绍 ZooKeeper 的底层原理&#xff0c;包括其架构、数据模型、核心机制和一致性协议等方面。 1. 架构 ZooKeeper 采用主从架构&#xff0…...

Spring Boot 事件监听机制实战【自定义 Spring Boot 事件监听】

前言&#xff1a; 上一篇我们分析了 Spring Boot 事件监听的原理&#xff0c;本篇我们来自定义实现自己的监听器。 Spring Boot 系列文章传送门 Spring Boot 启动流程源码分析&#xff08;2&#xff09; Spring Boot 启动流程源码分析&#xff08;2&#xff09; Spring Bo…...

AIGC笔记--Stable Diffusion源码剖析之DDIM

1--前言 以论文《High-Resolution Image Synthesis with Latent Diffusion Models》 开源的项目为例&#xff0c;剖析Stable Diffusion经典组成部分&#xff0c;巩固学习加深印象。 2--DDIM 一个可以debug的小demo&#xff1a;SD_DDIM 以文生图为例&#xff0c;剖析SD中DDIM的…...

【BUUCTF-PWN】13-jarvisoj_level2_x64

参考&#xff1a;BUU pwn jarvisoj_level2_x64 64位函数调用栈 - Nemuzuki - 博客园 (cnblogs.com) 64位&#xff0c;开启了NX保护 执行效果如下&#xff1a; main函数&#xff1a; vulnerable_function函数 read函数存在栈溢出&#xff0c;溢出距离为0x808 查找后门…...

项目实战--Spring Boot 3整合Flink实现大数据文件处理

一、应用背景 公司大数据项目中&#xff0c;需要构建和开发高效、可靠的数据处理子系统&#xff0c;实现大数据文件处理、整库迁移、延迟与乱序处理、数据清洗与过滤、实时数据聚合、增量同步&#xff08;CDC&#xff09;、状态管理与恢复、反压问题处理、数据分库分表、跨数据…...

开发者工具攻略:前端测试的极简指南

前言 许多人存在一个常见的误区&#xff0c;认为测试只是测试工程师的工作。实际上&#xff0c;测试是整个开发团队的责任&#xff0c;每个人都应该参与到测试过程中。 在这篇博客我尽量通俗一点地讲讲我们前端开发过程中&#xff0c;该如何去测试 浏览器开发者工具简介 开…...

git保存分支工作状态

git stash...

系统架构设计师——计算机体系结构

分值占比3-4分 计算机硬件组成 计算机硬件组成主要包括主机、存储器和输入/输出设备。 主机&#xff1a;主机是计算机的核心部分&#xff0c;包括运算器、控制器、主存等组件。运算器负责执行算术和逻辑运算&#xff1b;控制器负责协调和控制计算机的各个部件&#xff1b;主存…...

3D鸡哥又上开源项目!单图即可生成,在线可玩

大家好&#xff0c;今天和大家分享几篇最新的工作 1、Unique3D Unique3D从单视图图像高效生成高质量3D网格&#xff0c;具有SOTA水平的保真度和强大的通用性。 如下图所示 Unique3D 在 30 秒内从单视图野生图像生成高保真且多样化的纹理网格。 例如属于一张鸡哥的打球写真照 等…...

设计模式实现思路介绍

设计模式是在软件工程中用于解决特定问题的典型解决方案。它们是在多年的软件开发实践中总结出来的&#xff0c;并且因其重用性、通用性和高效性而被广泛接受。设计模式通常被分为三种主要类型&#xff1a;创建型、结构型和行为型。 创建型设计模式 创建型设计模式专注于如何创…...

Node.js学习教程

Node.js学习教程可以从基础到高级&#xff0c;逐步深入理解和掌握这一强大的JavaScript运行环境。以下是一个详细的Node.js学习教程概述&#xff0c;帮助初学者和进阶者更好地学习Node.js。 一、Node.js基础入门 1. 了解Node.js 定义&#xff1a;Node.js是一个基于Chrome V8…...

项目页面优化,我们该怎么做呢?

避免页面卡顿 怎么衡量页面卡顿的情况呢&#xff1f; 失帧和帧率FPS 60Hz就是帧率fps&#xff0c;即一秒钟60帧&#xff0c;换句话说&#xff0c;一秒钟的动画是由60幅静态图片连在一起形成的。 卡了&#xff0c;失帧了&#xff0c;或者掉帧了&#xff0c;一秒钟没有60个画面&…...

【PCIe】P2P DMA

PCIe P2P (peer-to-peer communication)是PCIe的一种特性&#xff0c;它使两个PCIe设备之间可以直接传输数据&#xff0c;而不需要使用主机RAM作为临时存储。如下图3的走向 比如EP1要发送和数据给EP2,操作流程如下&#xff1a; 1. 打开EP1的dma控制器&#xff1b;--client侧 …...

Linux shell编程学习笔记62: top命令 linux下的任务管理器

0 前言 top命令是Unix 和 Linux下常用的性能分析工具&#xff0c;提供了一个动态的、交互式的实时视图&#xff0c;显示系统的整体性能信息&#xff0c;以及正在运行的进程的相关信息&#xff0c;包括各个进程的资源占用状况&#xff0c;类似于Windows的任务管理器。 1 top命令…...

如何在Java中实现高性能的网络通信

如何在Java中实现高性能的网络通信 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 在当今互联网时代&#xff0c;高性能的网络通信是构建大规模分布…...

政务单位网站SSL证书选择策略

在数字化快速发展的今天&#xff0c;政务单位网站作为政府与公众沟通的重要桥梁&#xff0c;其安全性和可信度显得尤为重要。SSL证书作为保障网站安全的重要手段&#xff0c;其选择对于政务单位网站来说至关重要。本文将探讨政务单位网站在选择SSL证书时应该考虑的因素&#xf…...

零基础入门 Ai 数据挖掘竞赛-速通 Baseline-1

#AI夏令营 #Datawhale #夏令营 本项目为Datawhale 2024 年 AI 夏令营赛事&#xff0c;零基础入门 AI 数据挖掘竞赛-速通学习手册配套的代码项目。 项目链接&#xff1a;https://aistudio.baidu.com/bd-cpu-02/user/2961857/8113198/home#codelab 任务目标 根据给的test&…...

第二十六章 生成器(generator)(Python)

文章目录 前言一、生成器函数 前言 在 Python 中&#xff0c;使用了 yield 的函数被称为生成器&#xff08;generator&#xff09; yield 是一个关键字&#xff0c;用于定义生成器函数&#xff0c;生成器函数是一种特殊的函数&#xff0c;可以在迭代过程中逐步产生值&#xff…...

Vue通过Key管理状态

Vue通过Key管理状态 Vue 默认按照“就地更新”的策略来更新&#xff0c;通过 v-for 渲染的元素列表。当数据项的顺序改变时&#xff0c;Vue 不会随之移动 DOM 元素的顺序&#xff0c;而是就地更新每个元素&#xff0c;确保它们在原本指定的索引位置上渲染。为了给 Vue 一个提示…...

鸿蒙 HarmonyOs 网络请求 快速入门

官方文档&#xff1a; ArkUI简介-ArkUI&#xff08;方舟UI框架&#xff09;-应用框架 | 华为开发者联盟 (huawei.com) 一、通过原有的http组件进行网络请求&#xff08;方式一&#xff09; 1.1 HttpRequestOptions的操作 名称类型描述methodRequestMethod请求方式&#xff…...

告别GRUB安装失败:Ubuntu 22.04单硬盘安装最全避坑指南(MBR/EFI详解)

Ubuntu 22.04单硬盘安装终极指南&#xff1a;从MBR到UEFI的GRUB避坑手册当你满怀期待地将Ubuntu 22.04安装U盘插入电脑&#xff0c;却在最后关头遭遇"无法将GRUB安装到/dev/sda"的红色警告时&#xff0c;那种挫败感我深有体会。这不是简单的安装失败&#xff0c;而是…...

从Unity/UE转战Godot 4.2:一个老司机的界面与工作流迁移实战笔记

从Unity/UE转战Godot 4.2&#xff1a;一个老司机的界面与工作流迁移实战笔记当你在Unity或Unreal Engine中已经能闭着眼睛完成场景搭建时&#xff0c;突然面对Godot那个极简的启动界面&#xff0c;可能会产生一种"工具箱被清空"的焦虑。作为同时深度使用过三大引擎的…...

扩散模型量化技术:挑战、突破与实战指南

1. 项目概述&#xff1a;扩散模型量化的技术挑战与突破在生成式AI领域&#xff0c;扩散模型已成为图像合成的标杆技术&#xff0c;但其庞大的参数量&#xff08;如Stable Diffusion的U-Net约8.6亿参数&#xff09;导致显著的部署门槛。传统32位浮点&#xff08;FP32&#xff09…...

01-大模型AI:大模型学习指南

大模型概述 一、大模型训练的三大核心阶段 预训练:自监督学习的“知识积累期” 预训练是大模型的“启蒙阶段”,采用自监督学习模式。模型像海绵一样从海量文本数据中自主学习语言规律、语义关联和世界知识。例如,训练一个AI领域大模型时,会输入数百万篇AI论文、技术博客…...

AI by Hand Excel:在电子表格中实现损失函数与精度评估的完整指南

AI by Hand Excel&#xff1a;在电子表格中实现损失函数与精度评估的完整指南 【免费下载链接】ai-by-hand-excel 项目地址: https://gitcode.com/gh_mirrors/ai/ai-by-hand-excel 你是否想过&#xff0c;无需编写一行代码就能深入理解人工智能算法的核心原理&#xff…...

为什么Rotating-machine-fault-data-set是机械故障诊断研究的必备资源?

为什么Rotating-machine-fault-data-set是机械故障诊断研究的必备资源&#xff1f; 【免费下载链接】Rotating-machine-fault-data-set Open rotating mechanical fault datasets (开源旋转机械故障数据集整理) 项目地址: https://gitcode.com/gh_mirrors/ro/Rotating-machin…...

AI Agent Harness Engineering 生态工具链盘点:2026 开发者必备的 15 款核心工具

AI Agent Harness Engineering 生态工具链盘点&#xff1a;2026 开发者必备的 15 款核心工具 关键词&#xff1a;AI Agent Harness Engineering、Agent 编排调度、多模态工具调用、RAG增强协同、端云混合部署、伦理安全合规、图灵完备推理链、2026开发者技术栈 摘要&#xff1a…...

支付即开票·自助开票·阿雪心学·无相无界(12)—东方仙盟

未来之窗架构&#xff1a;支付即开票&#xff0c;构建企业数字化开票新生态未来之窗架构深度融合数电发票创新能力&#xff0c;以支付即开票为核心内核&#xff0c;打通交易、开票、数据流转全链路&#xff0c;为企业提供合规、高效、低成本的一体化开票解决方案。该架构无需依…...

【信息科学与工程学】计算机科学与自动化 ——第六十五篇 虚拟化/MIG 系列02

编号 类型 领域 虚拟化/MIG模式 算法名称 算法逐步推理思考的数学方程式及参数/常量/向量/常数/数字/数值列表 算法的时序数学方程式 关联知识 401 性能优化 GPU虚拟化+容器 MIG+容器 基于GPU内存带宽隔离的容器化AI训练任务调度算法 1. 带宽模型:每个MIG实例带宽…...

Windows下JMeter高并发压测端口耗尽问题排查与修复

1. 为什么压测做到一半&#xff0c;JMeter突然报“Connection refused”却查不到服务端异常&#xff1f;你正在用JMeter对一个新上线的订单接口做5000并发压测&#xff0c;线程组配置妥当&#xff0c;监听器数据也正常跳动。跑到第3分钟&#xff0c;错误率陡然飙升到92%&#x…...