Comprehensive Guide to Apache Zookeeper: Architecture, Use Cases, and Commands
This article provides an in‑depth overview of Apache Zookeeper, covering its core concepts, common application scenarios such as pub/sub, configuration management and naming services, detailed architecture including znodes and node types, the watch mechanism, ZAB consensus protocol, and practical usage examples with Maven dependencies, Java client code, and command‑line operations.
Apache Zookeeper is an open‑source distributed coordination service originally created by Yahoo and modeled after Google’s Chubby, offering strong consistency for distributed applications.
Typical Application Scenarios
1. Publish/Subscribe – Producers write data to Zookeeper nodes while multiple subscribers watch those nodes; changes trigger watcher events and subscribers pull the latest data.
2. Configuration Management – Centralized configuration is stored in a Zookeeper znode; any change notifies all client machines, which then fetch and apply the new settings.
3. Naming Service – Services register a global path (e.g., com.mikechen.helloService ) that acts as a unique identifier, enabling clients to discover service addresses, as used by Dubbo.
Zookeeper Architecture
Data is stored as hierarchical znodes (similar to a file system) identified by paths starting with “/”. Each znode consists of stat (metadata), data (payload), and children (sub‑nodes). Node types include persistent, ephemeral, and sequential nodes.
Watch Mechanism
Clients register watches on znodes; when a node’s data, deletion, or child list changes, Zookeeper sends a watch event to the client, which can then react accordingly.
Core Principles and Roles
Zookeeper runs as a quorum of servers: one leader handles write requests, multiple followers serve read requests and act as standby leaders, and optional observers provide read‑only replicas without voting rights.
The cluster typically follows a 2N+1 configuration to tolerate failures while maintaining a majority.
ZAB Protocol
The Zookeeper Atomic Broadcast (ZAB) protocol ensures crash‑recovery and atomic broadcast, consisting of four phases: Leader Election, Discovery, Synchronization, and Broadcast, similar to Paxos and Raft.
Practical Usage
1. Add Maven dependency:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
</dependency>2. Create a Java client:
ZooKeeper client = new ZooKeeper("127.0.0.1:2181/mikechen", 3000, null);3. Create a persistent node:
client.create("/架构/视频", "视频具体内容".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);4. Set data on a node:
client.setData("/架构/视频", "并发编程视频".getBytes(), -1);5. Retrieve data:
byte[] data = client.getData("/架构/视频", false, null);
System.out.println(new String(data));Zookeeper Command‑Line Operations
Start server: bin/zkServer.sh start
Check status: bin/zkServer.sh status
Stop server: bin/zkServer.sh stop
Restart server: bin/zkServer.sh restart
Connect with CLI: ./zkCli.sh -server 127.0.0.1:2181
Create node: create /mikechen "架构"
Get node data: get /mikechen watch
Set node data: set /zk "mikechen"
The article concludes with a promotional note offering a 300 KB collection of advanced architecture materials and a link to a comprehensive Java interview question repository.
Mike Chen's Internet Architecture
Over ten years of BAT architecture experience, shared generously!
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.