zookeeper内部原理 (进阶介绍 三)

目录

ZooKeeper架构

[Zab协议(Zookeeper Atomic Broadcast)](#Zab协议(Zookeeper Atomic Broadcast))

阶段一:Leader选举

阶段二:同步

阶段三:广播

数据结构

Watcher机制

会话管理

会话超时

临时节点

容错和高可用

多数决策:

数据复制:

自动恢复:

数据一致性保证


ZooKeeper内部原理主要围绕其核心组件和机制来展开,包括其架构、数据一致性协议(Zab协议)、Watcher机制等。以下是对ZooKeeper内部原理的详细解释:

ZooKeeper架构

ZooKeeper是一个分布式协调服务,其架构由以下几部分组成:

  • Client(客户端): 使用ZooKeeper API与ZooKeeper集群进行交互的应用程序。
  • Server(服务器): 组成ZooKeeper集群的节点,包括Leader、Follower和Observer。
  • Ensemble(集群): 由多个服务器节点组成的ZooKeeper集群,一般推荐使用奇数个节点。

Zab协议(Zookeeper Atomic Broadcast)

Zab协议是ZooKeeper实现数据一致性和可靠性的核心协议,主要包括以下几个阶段:

阶段一:Leader选举

当ZooKeeper集群启动或现有Leader失效时,集群需要进行Leader选举。Leader选举过程如下:

  • 每个节点向其他节点发送投票,推荐自己或认为合适的节点作为Leader。
  • 节点接收投票并统计,选出得票数过半的节点作为Leader。
  • Leader节点向所有Follower节点发送确认消息,Follower节点确认后,新的Leader就位。

阶段二:同步

Leader选举完成后,Leader需要确保所有Follower节点的数据与自己保持一致,这个过程称为同步。同步过程如下:

  • Leader节点检查每个Follower节点的最新事务ID(zxid)。
  • Leader节点向Follower节点发送缺失的事务日志,直到所有节点的数据与Leader一致。

阶段三:广播

当同步完成后,Leader开始处理客户端的事务请求(写操作)。广播过程如下:

  • 客户端发送写请求给Leader节点。
  • Leader节点生成事务提议(proposal),并将其广播给所有Follower节点。
  • Follower节点接收提议并写入本地事务日志,然后向Leader节点发送确认消息(ack)。
  • 当Leader节点收到超过半数Follower节点的确认消息时,提交事务,并向所有Follower节点发送提交消息(commit)。
  • Follower节点接收到提交消息后,应用事务并通知客户端。

数据结构

ZooKeeper的命名空间是一个层次化的树状结构,每个节点称为znode。znode具有以下特性:

  • 数据存储:每个znode可以存储少量数据。
  • 元数据:每个znode包含元数据,如版本号、时间戳和子节点数量等。
  • 类型:znode可以是持久节点、临时节点或序列节点。

Watcher机制

ZooKeeper提供了Watcher机制,用于监控znode的变化。Watcher机制如下:

  • 客户端可以在znode上注册Watcher。
  • 当znode发生变化(如数据变更、子节点变更或节点删除)时,ZooKeeper会触发Watcher,并通知注册了Watcher的客户端。
  • Watcher是一次性触发的,即每次触发后需要重新注册。

会话管理

ZooKeeper通过会话(session)来管理客户端连接和状态。会话具有以下特性:

会话超时

:每个会话都有一个超时时间,客户端需要在超时时间内保持与ZooKeeper服务器的连接。

临时节点

:由客户端创建的临时节点与会话相关联,当会话失效时,临时节点会被自动删除。

容错和高可用

ZooKeeper通过以下机制实现容错和高可用:

多数决策:

ZooKeeper采用多数决策(quorum)机制,确保即使部分节点故障,集群仍能正常工作。通常,集群由2F+1个节点组成,可以容忍F个节点故障。

数据复制:

所有事务日志和数据都复制到多个节点,确保数据的可靠性和一致性。

自动恢复:

当节点故障时,ZooKeeper能够自动进行Leader选举和数据同步,确保集群的正常运行。

数据一致性保证

ZooKeeper通过Zab协议和多数决策机制,确保了以下一致性特性:

线性一致性:

所有事务请求按照全局顺序执行,确保数据的一致性。

FIFO顺序:

来自同一客户端的请求按照发送顺序执行。

最终一致性:

在没有新的更新操作时,所有节点的数据最终会达到一致。

相关推荐
freejackman22 分钟前
【实战二】字段级血缘追踪:拆解 AST 迷局,精准穿透函数链与子查询
大数据·数据库·sql
goujunwe1 小时前
GEO 内容的“可摘录性”打磨技巧:段落、表格、小标题怎么写,方便大模型提取独立答案块
大数据·人工智能
小田学Python1 小时前
DeepSeek Harness 完整上手指南:安装部署 + 必装插件 + 用一周就回不去的功能
大数据·大模型·agent·ai工具·deepseek
成都蜀味缘餐饮技术培训学校5 小时前
手撕烤兔技术培训实战指南,秘制腌料配方比例与调制手法
大数据·经验分享·笔记·其他·微信公众平台
roman_日积跬步-终至千里5 小时前
AI 能让一个人成为团队吗?从数据中台到 OPC,重新理解软件工程能力
大数据·人工智能·软件工程
演艺大赏7 小时前
NiFi 数据流实战:FTP→HDFS 与 CSV→Parquet,附坏数据、漏文件与双写
大数据
数字新视界8 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
wafrdggh9 小时前
2026 商城小程序平台哪个价格合理?把跨境附加成本这个坑算透
大数据·小程序
山甫aa9 小时前
锁一篇搞定:乐观锁、悲观锁、CAS、数据库锁与分布式锁【从零开始的 Web 后端学习】
java·数据库·分布式·后端·学习·web
昂永科技|非标件自动报价系统10 小时前
# 昂永(上海)科技非标件自动核价系统落地无锡先导,助力制造核价数字化
大数据·科技·制造