知其然,知其所以然
ZooKeeper 内部原理 2026-10-01

Curator RetryPolicy 实测

Curator 重试策略实测:服务端不可用时 6 种策略放弃前的耗时(2.3–7.9 s)、策略被 main 与 Curator-Framework 两条线程各调用一遍、指数退避的间隔带随机性;服务端重启约 3 s 期间 RetryNTimes(1,100) 失败,其余 3 种成功。

ZooKeeper Curator 重试策略 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

Go ZooKeeper 客户端

go-zookeeper/zk v1.0.4 在真实 ZooKeeper 3.9.6 上的实测:错误为包级变量、watch 是一次性 channel(200 次更新收到 170 次事件)、64 goroutine 并发 35.9 倍、Multi 原子、自带锁 200/200、服务端不可用时调用立即失败而不是等待。

ZooKeeper Go go-zookeeper 客户端 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

Leader 选举算法源码

读 ZooKeeper 3.9.6 的 FastLeaderElection 源码并逐条验证:totalOrderPredicate 用反射穷举 64 组与源码规则一致;观察者的选票全为 MIN_VALUE;finalizeWait=200 ms 使选举耗时 217–227 ms;通知超时按 200→400→800 ms 指数退避。

ZooKeeper 源码 选举 FastLeaderElection 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

DataTree 与 WatchManager 源码

读 ZooKeeper 3.9.6 的 WatchManager 与 DataTree 源码并逐条验证:Set 去重(重复注册 100 次只计 1)、触发即移除、连接关闭时清理、持久递归 watch 不被移除并覆盖子孙节点、delete 时 supress 使同一 watcher 只收到一个通知、createNode 更新父节点 cversion 与 pzxid。

ZooKeeper 源码 DataTree WatchManager 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

Dubbo 注册中心源码

真实运行 Dubbo 3.3.6 的 ZooKeeper 注册中心并读 ZookeeperRegistry 源码:接口级与应用级两套注册节点、mapping 与 metadata;默认 session 60 s 被服务端截到 20 s(16 s 后节点消失,但 kill -9 时消费者 0 次失败);session=3000 约 3 s;SIGTERM 注销 0.02 s。

ZooKeeper Dubbo 注册中心 源码 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

ZooKeeper 与 Kafka、Dubbo、HBase 的关系

用 deps.dev 解析 14 个常见项目的 Maven 依赖图:7 个声明了 ZooKeeper 依赖(3.8.x / 3.9.x);Kafka 3.9.2 依赖 ZooKeeper 3.8.4、4.0.2 起依赖图里没有 ZooKeeper;依赖图里没有不等于不使用。

ZooKeeper 生态 Maven 依赖 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

ZooKeeper 在 Kafka 旧版本中的职责

真实运行 Kafka 3.9.2 的 ZooKeeper 模式(3 个 broker):看它在 ZooKeeper 里建的节点(brokers/controller/分区状态)、消费组 offset 不在 ZooKeeper 里、kill -9 controller 后 5.7 s 换主(会话超时 6 s)、空闲集群的 ZooKeeper 负载。

ZooKeeper Kafka controller 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

ZooKeeper 迁移到 KRaft

真实把一个 Kafka 3.9.2 的 3 broker 集群从 ZooKeeper 迁移到 KRaft(控制器 → 滚动重启 → 切纯 KRaft → 停 ZooKeeper):过程中后台生产者确认写入 2702 条,读回 2702 条、丢失 0、重复 0,最长写入停顿 1.0 s,主题与消费组 offset 不变。

ZooKeeper Kafka KRaft 迁移 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

HBase 使用 ZooKeeper 的真实路径

真实运行 HBase 2.6.6(1 master + 2 region server + backup master)连我的 ZooKeeper:列出 /hbase 下的真实 znode 与数据;region 位置不在 ZooKeeper;kill -9 region server 后节点 4.7 s 消失、客户端 6 次失败;kill -9 active master 后 5.7 s 切到 backup、读写 0 失败。

ZooKeeper HBase Region Server 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

Spring Cloud 与 ZooKeeper

真实运行 Spring Boot 3.3.5 + Spring Cloud 2023.0.4 的 ZooKeeper 服务发现与配置中心:/services/<应用>/<uuid> 临时节点与 JSON 内容;kill -9 后 20.6 s 才摘除(会话协商 20 s);配置节点 27/31 ms 生效、应用专属配置压过全局默认。

ZooKeeper Spring Cloud 服务发现 配置中心 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

ZooKeeper 与 Kubernetes 控制面

从 v1.37.1 源码编译真实的 kube-apiserver 并连本机 etcd:空集群 /registry 已有 57 个 key;创建 namespace 与 ConfigMap 后在 etcd 里找到它们(值是 k8s\x00 开头的 protobuf);resourceVersion 等于 etcd 的 mod_revision;源码里只有 etcd3 存储;把 --etcd-servers 指向 ZooKeeper 则启动失败。

ZooKeeper Kubernetes etcd apiserver 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

ZooKeeper 与 etcd 对比

3 节点 ZooKeeper 与 3 节点 etcd 3.7.2 同机对比:写延迟中位 5.1 vs 7.0 ms;快速更新时 watch 收到 12 次回调 vs 208 个事件;崩溃发现 2.4–3.4 vs 2.7–2.9 s;杀 leader 窗口 421–1122 vs 1053–1349 ms;etcd 值上限 1.4 MiB 可、2 MiB 拒绝。

ZooKeeper etcd 对比 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号