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

ZAB 与 Raft 的区别

ZAB 与 Raft 的区别(ZooKeeper 3.9.6 与 etcd 3.7.2 实测):ZooKeeper 本地读没有复现旧读(0/3000);etcd 线性一致读 0/3000、serializable 读 303/3000 旧读;杀 leader 后写中断 etcd 中位 2030 ms vs ZooKeeper 约 445 ms(默认配置)。

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

Follower 掉线后的恢复

Follower 掉线后的恢复实测:离线期间集群仍可写;错过 100 / 3000 / 30000 个写入后重启,leader 都用 DIFF 同步,追上用时 569 / 610 / 809 ms;恢复后数据与 zxid 与 leader 一致。

ZooKeeper Follower 故障恢复 DIFF 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

数据落后节点重新同步

数据落后 / 无响应节点的处理实测:syncLimit=2 × tickTime=500 ms 时,暂停 follower 后约 898 ms leader 把它判定为掉线(synced_followers 2 → 1),恢复后约 41 ms 重新同步;暂停 0.5 s 则不会被踢出。

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

网络分区与集群恢复

网络分区与集群恢复实测(TCP 代理悄悄丢包):隔离 leader 后约 1 s 内所有节点发现并「不服务」,多数派一侧在几秒内选出新 leader(各次差别大);被隔离侧的写得到 ConnectionLoss 且不会保留;恢复后一个 leader + 两个 follower,数据一致。

ZooKeeper 网络分区 集群恢复 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

ZooKeeper 脑裂问题

ZooKeeper 脑裂问题实测(5 节点分成 2 | 3,悄悄丢包):198 次采样里同时报告 leader 的节点数最大为 1;多数派一侧写入成功(5358 ms),少数派一侧的写 ConnectionLoss;恢复后 5 个节点 zxid 相同,少数派的写不保留。

ZooKeeper 脑裂 Quorum 网络分区 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

集群成员管理

集群成员管理实测(静态配置):成员 = 每个节点 zoo.cfg 里的 server.N 列表 + myid;myid 不在列表里节点启动失败(退出码 1);成员列表不一致的节点无法加入;名单外的节点(myid=4)能以 follower 身份连上并同步,但不被算进多数派。

ZooKeeper 集群成员 myid 配置 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

动态重配置 reconfig

动态重配置实测:默认 reconfig 被禁用(Reconfig is disabled);开启 reconfigEnabled + dynamicConfigFile 后 config 命令返回成员与版本;reconfig -add 4 号节点后 639 ms 追上并成为 follower;reconfig -remove 后被移除的进程仍在运行。

ZooKeeper reconfig 动态配置 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

集群扩容与缩容

集群扩容与缩容实测(动态配置):3 → 5 节点一条 reconfig 加入 2 个节点,20000 个 znode 用 snapshot, snapshot 同步,620 ms 追上;5 节点挂 2 个仍可写;reconfig -remove 4,5 缩回 3 节点后又只能容忍 1 个故障。

ZooKeeper 扩容 缩容 reconfig 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

服务故障感知

服务故障感知实测:临时节点 + 父节点 watch。正常退出 11 ms 被发现;kill -9 / 进程冻结要等会话超时(3 s → 3472 / 3321 ms,10 s → 9910 / 10385 ms)。

ZooKeeper 故障检测 会话超时 服务注册 真实验证 动画演示
Elasticsearch 2026-10-01

Dynamic Mapping 如何自动推断字段类型

本机真实对混合字段文档验证ES如何自动推断类型,带引号的数字字符串默认不会被当成数字,开numeric_detection才会。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

显式 Mapping 与 Dynamic Mapping 的差异

本机真实验证显式Mapping能精确控制字段类型,且会在写入时强制校验类型,不像动态推断那样宽松。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

date、date_nanos 与时间格式解析

本机真实用script_fields揭穿date字段_source显示完整精度但内部已经截断到毫秒的真相,对比date_nanos保留纳秒精度。

Elasticsearch 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号