Skip to content

用 ZooKeeper 可以做的 7 件“分布式脏活累活”
ZK 本质是一个 带监听功能的小文件系统 + 强一致广播机。凡是“多个进程抢同一把锁、同一条配置、同一条元数据”的场景都能用。

场景ZooKeeper 技术点一句话解释
1 服务注册发现临时顺序节点 + Watcher节点挂掉自动删,客户端实时收到通知
2 分布式锁临时顺序节点 + 监听前一个节点谁序号最小谁拿到锁
3 Master 选主创建 /master 临时节点,成功即当选,失败则监听删除事件主节点挂掉秒级重新选举
4 配置中心把配置写到 ZNode,监听数据变化配置一改,所有节点热刷新
5 分布式队列顺序节点做 FIFO / 优先级队列生产者写节点,消费者监听子节点列表
6 Barrier 栅栏所有客户端在某个父节点下建子节点,计数到达阈值后一起放行分布式任务同步起跑
7 元数据/命名服务统一命名空间,路径即名字比如 Kafka 把 Broker 列表、Topic 分区信息都放 ZK

代码片段:分布式锁(Curator 版)

java
InterProcessMutex lock = new InterProcessMutex(client, "/locks/pay");
if (lock.acquire(10, TimeUnit.SECONDS)) {
    try {
        // 执行业务
    } finally {
        lock.release();
    }
}

总结一句话

• ZooKeeper 像“分布式班长”,凡是抢锁、选主、发通知、存配置的活都能干。

4️⃣ 基于 ZooKeeper 的 HDFS HA 方案
组件:NameNode Active/Standby + ZKFC + ZK
• 启动时两个 NN 在 ZK /hadoop-ha/mycluster 注册 临时顺序节点
• ZKFC 进程监控本地 NN 健康:

  • 心跳丢失 → 删除临时节点 → Standby NN 收到 节点删除事件 → 抢注新节点 → 触发 failover → 切主
    • 客户端通过 ZK 读取 ActiveNameNode 地址,实现秒级故障切换
    效果:NameNode 宕机 5 秒完成主备切换,HDFS 可用性 99.99%。