<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ZooKeeper on 小蜜蜂</title>
        <link>https://xumf.net/tags/zookeeper/</link>
        <description>Recent content in ZooKeeper on 小蜜蜂</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Thu, 22 Mar 2018 22:21:04 +0800</lastBuildDate><atom:link href="https://xumf.net/tags/zookeeper/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>ZooKeeper</title>
            <link>https://xumf.net/blog/zookeeper/</link>
            <pubDate>Thu, 22 Mar 2018 22:21:04 +0800</pubDate>
            <guid>https://xumf.net/blog/zookeeper/</guid>
            <description>&lt;h2 id=&#34;zookeeper-核心原理&#34;&gt;ZooKeeper 核心原理&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;数据模型&lt;/strong&gt;：&#xA;&lt;ol&gt;&#xA;&lt;li&gt;ZNode：树形结构中的节点，存储数据（&amp;lt;=1MB）&lt;/li&gt;&#xA;&lt;li&gt;节点类型&#xA;&lt;ol&gt;&#xA;&lt;li&gt;持久节点：手动删除&lt;/li&gt;&#xA;&lt;li&gt;临时节点：会话结束自动删除&lt;/li&gt;&#xA;&lt;li&gt;顺序节点：名称追加单调递增序号&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;版本号：每个 ZNode 有版本号， 用于 CAS操作&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;架构与角色&lt;/strong&gt;：&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Leader：处理写请求，发起提案&lt;/li&gt;&#xA;&lt;li&gt;Follower：参与选举，处理读请求&lt;/li&gt;&#xA;&lt;li&gt;Observer：拓展读性能，不参与选举&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ZAB 协议&lt;/strong&gt;（ZooKeeper Atomic Broadcast）&#xA;&lt;ol&gt;&#xA;&lt;li&gt;恢复模式：选举 Leader （基于 zxid 和 myid，半数以上投票）&lt;/li&gt;&#xA;&lt;li&gt;广播模式：Leader 提出事物，半数以上 Follower 确认后提交&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;一致性保护&lt;/strong&gt;：&#xA;&lt;ol&gt;&#xA;&lt;li&gt;顺序一致性（客户端操作按顺序执行）&lt;/li&gt;&#xA;&lt;li&gt;原子性（事物要么全成功要么全失败）&lt;/li&gt;&#xA;&lt;li&gt;最终一致性（读请求可能返回旧值，但最终同步）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Watch 机制&lt;/strong&gt;：&#xA;&lt;ol&gt;&#xA;&lt;li&gt;客户端监听 ZNode 变化（如节点删除，数据更新）&lt;/li&gt;&#xA;&lt;li&gt;一次性触发，需要重新注册&lt;/li&gt;&#xA;&lt;li&gt;异步通知，可能存在延迟或丢失&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;典型应用场景&#34;&gt;典型应用场景&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;分布式锁&lt;/strong&gt;：通过临时顺序节点实现，避免惊群效应&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;配置管理&lt;/strong&gt;：集中存储配置，客户端监听变更&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;服务注册与发现&lt;/strong&gt;：临时节点表示服务实例在线状态&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;选主（Leader Election）&lt;/strong&gt;：最小序号节点成为 Master&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分布式队列&lt;/strong&gt;：顺序节点实现生产消费模型&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;重要知识点&#34;&gt;重要知识点&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;ZooKeeper 如何保证数据一致性？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;答&lt;/strong&gt;：通过 ZAB 协议，写操作需要半数以上节点确认，保证顺序一致性和原子性。读请求可能来自任意节点（可能读到旧数据），但可通过 &lt;code&gt;sync&lt;/code&gt; 操作强制读取最新值。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;临时节点的作用时什么？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;答&lt;/strong&gt;：临时节点在会话结束后自动删除，常用于服务注册（服务下线自动清除）和分布式锁（客户端崩溃自动释放锁）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;如何处理脑裂问题？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;答&lt;/strong&gt;：ZAB 协议要求写操作必须由 Leader 发起，且需要半数以上节点确认。网络分区时，仅拥有多数节点的分区能选举 Leader，另一个分区无法写入，避免数据不一致。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Watcher 机制有哪些主要事项？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;答&lt;/strong&gt;：一次性触发、通知可能延迟、需要处理事件丢失（如 Watch 注册期间发生变更）。需在回调中重新注册 Watcher。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Leader 选举过程是怎样的？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;答&lt;/strong&gt;：节点启动时进入选举状态，投票优先给 zxid 最大的节点，zxid 相同则选 myid 更大的。获得半数以上投票的节点成为 Leader。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;如何实现分布式锁？&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;答&lt;/strong&gt;：客户端创建临时顺序节点，检查是否为最小序号节点。若是则获得锁；否则监听前一个节点的删除事件，使用 &lt;code&gt;exists()&lt;/code&gt; +Watcher 避免轮询。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;性能与优化&#34;&gt;性能与优化&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;写性能&lt;/strong&gt;：依赖半数以上节点确认，建议集群节点数为奇数（如3、5）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;读性能&lt;/strong&gt;：可直接从本地节点读取，高吞吐。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;快照与日志&lt;/strong&gt;：定期生成快照（snapshot）和事务日志（txn log），加速恢复。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;配置与运维&#34;&gt;配置与运维&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;会话超时&lt;/strong&gt;：&lt;code&gt;tickTime&lt;/code&gt; 为基本时间单位，&lt;code&gt;sessionTimeout&lt;/code&gt; 建议2-20倍&lt;code&gt;tickTime&lt;/code&gt; 。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;数据持久化&lt;/strong&gt;：事务日志和快照存储于&lt;code&gt;dataDir&lt;/code&gt; 和&lt;code&gt;dataLogDir&lt;/code&gt; 。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ACL 控制&lt;/strong&gt;：支持IP、Digest等多种认证方式，精细化权限管理。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
