大家好我是锋哥。今天分享关于【Java高频面试题Zookeeper集群数据是如何同步的】面试题 。希望对大家有帮助Java高频面试题Zookeeper集群数据是如何同步的1️⃣ Zookeeper 集群概念回顾Zookeeper 是一个分布式协调服务通常用来管理配置、命名服务、分布式锁等。集群模式下称为ensembleZookeeper 集群通常由奇数个节点组成3、5、7 节点最常见保证多数派quorum原则。每个节点都有完整的数据副本称为ZNode 数据树。所以核心问题是多个副本如何保持一致这就是 Zookeeper 的数据同步机制。2️⃣ 数据同步的核心机制Zab 协议Zookeeper 使用ZabZooKeeper Atomic Broadcast协议来保证数据一致性。Zab 是一种原子广播协议类似于 Raft 或 Paxos。它的核心作用是保证所有事务写操作在集群节点中按相同顺序执行。2.1 节点角色Leader负责接收客户端写请求生成事务 IDzxid广播给 Follower。Follower接收 Leader 的事务提议proposal同步到本地数据。Observer可选不参与投票但接收数据更新减少负载。3️⃣ 数据同步流程写操作假设客户端向集群写入数据比如创建一个 znode整个同步流程如下步骤 1客户端请求写操作客户端连接到任意节点Leader 或 Follower。如果连接到 FollowerFollower 会转发请求给 Leader。步骤 2Leader 生成事务 IDzxid每个写操作都会分配一个全局递增的 zxid事务 ID。zxid 保证了集群中的操作顺序。步骤 3Leader 广播提议ProposalLeader 将事务提议广播给所有 Follower。这叫“提议阶段”proposal phase。步骤 4Follower 记录提议Follower 收到提议后会写入本地事务日志transaction log。然后向 Leader 发送ACK确认。步骤 5Leader 等待多数 ACKLeader 等到大多数节点quorum确认。一旦获得多数 ACKLeader 就发送COMMIT 指令。步骤 6Follower 应用事务Follower 收到 COMMIT 后将事务写入内存数据树。同时写入本地磁盘快照和日志。此时事务完成客户端收到响应。⚡ 关键点写操作只有在多数派确认后才算完成。这保证了即使部分节点宕机集群数据依然一致。4️⃣ 数据同步Follower 启动或滞后同步有两种情况需要同步4.1 新节点加入新节点启动时需要全量同步snapshotLeader 的当前数据树。先从 Leader 拷贝最新快照snapshot然后从日志中应用增量事务。4.2 节点滞后如果某个 Follower 落后它会向 Leader 请求缺失的事务记录。Leader 将这些缺失的事务发送给 FollowerFollower 按顺序应用。这叫同步补全catch-up。5️⃣ 读操作的同步默认读操作可以由任何节点直接返回最新的数据称为最终一致性读。如果需要强一致性读可以客户端请求Leader读取保证返回最新提交的事务。6️⃣ 数据持久化与恢复Zookeeper 会将事务日志写入磁盘。定期生成快照snapshot减少恢复时的日志重放量。集群重启或节点故障时可以从快照 日志恢复数据。7️⃣ 总结Zookeeper 的数据同步靠Zab 协议实现原子广播。写操作经过Leader 提议 → Follower ACK → Leader COMMIT → Follower 应用流程。集群保证多数派提交确保一致性。节点启动或滞后时可以通过全量或增量同步追赶数据。读操作可弱一致或强一致。
Java高频面试题:Zookeeper集群数据是如何同步的?
大家好我是锋哥。今天分享关于【Java高频面试题Zookeeper集群数据是如何同步的】面试题 。希望对大家有帮助Java高频面试题Zookeeper集群数据是如何同步的1️⃣ Zookeeper 集群概念回顾Zookeeper 是一个分布式协调服务通常用来管理配置、命名服务、分布式锁等。集群模式下称为ensembleZookeeper 集群通常由奇数个节点组成3、5、7 节点最常见保证多数派quorum原则。每个节点都有完整的数据副本称为ZNode 数据树。所以核心问题是多个副本如何保持一致这就是 Zookeeper 的数据同步机制。2️⃣ 数据同步的核心机制Zab 协议Zookeeper 使用ZabZooKeeper Atomic Broadcast协议来保证数据一致性。Zab 是一种原子广播协议类似于 Raft 或 Paxos。它的核心作用是保证所有事务写操作在集群节点中按相同顺序执行。2.1 节点角色Leader负责接收客户端写请求生成事务 IDzxid广播给 Follower。Follower接收 Leader 的事务提议proposal同步到本地数据。Observer可选不参与投票但接收数据更新减少负载。3️⃣ 数据同步流程写操作假设客户端向集群写入数据比如创建一个 znode整个同步流程如下步骤 1客户端请求写操作客户端连接到任意节点Leader 或 Follower。如果连接到 FollowerFollower 会转发请求给 Leader。步骤 2Leader 生成事务 IDzxid每个写操作都会分配一个全局递增的 zxid事务 ID。zxid 保证了集群中的操作顺序。步骤 3Leader 广播提议ProposalLeader 将事务提议广播给所有 Follower。这叫“提议阶段”proposal phase。步骤 4Follower 记录提议Follower 收到提议后会写入本地事务日志transaction log。然后向 Leader 发送ACK确认。步骤 5Leader 等待多数 ACKLeader 等到大多数节点quorum确认。一旦获得多数 ACKLeader 就发送COMMIT 指令。步骤 6Follower 应用事务Follower 收到 COMMIT 后将事务写入内存数据树。同时写入本地磁盘快照和日志。此时事务完成客户端收到响应。⚡ 关键点写操作只有在多数派确认后才算完成。这保证了即使部分节点宕机集群数据依然一致。4️⃣ 数据同步Follower 启动或滞后同步有两种情况需要同步4.1 新节点加入新节点启动时需要全量同步snapshotLeader 的当前数据树。先从 Leader 拷贝最新快照snapshot然后从日志中应用增量事务。4.2 节点滞后如果某个 Follower 落后它会向 Leader 请求缺失的事务记录。Leader 将这些缺失的事务发送给 FollowerFollower 按顺序应用。这叫同步补全catch-up。5️⃣ 读操作的同步默认读操作可以由任何节点直接返回最新的数据称为最终一致性读。如果需要强一致性读可以客户端请求Leader读取保证返回最新提交的事务。6️⃣ 数据持久化与恢复Zookeeper 会将事务日志写入磁盘。定期生成快照snapshot减少恢复时的日志重放量。集群重启或节点故障时可以从快照 日志恢复数据。7️⃣ 总结Zookeeper 的数据同步靠Zab 协议实现原子广播。写操作经过Leader 提议 → Follower ACK → Leader COMMIT → Follower 应用流程。集群保证多数派提交确保一致性。节点启动或滞后时可以通过全量或增量同步追赶数据。读操作可弱一致或强一致。