# ZooKeeper

## 分布式协调

A 系统发送个请求到 mq，然后 B 消息消费之后处理了。那 A 系统如何知道 B 系统的处理结果？

**解决方式**：A 系统发送请求之后可以在 zk 上对某个节点的值注册个监听器，一旦 B 系统处理完了就修改 zk 那个节点的值，A 立马就可以收到通知。

![](https://3232244687-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LYZow-MmROshIrkwdtE%2F-LbDZL_Seg1IOgP7CiX-%2F-LbDZfMDk9HVTXADuH3H%2F01_zookeeper%E7%9A%84%E5%88%86%E5%B8%83%E5%BC%8F%E5%8D%8F%E8%B0%83%E5%9C%BA%E6%99%AF.png?alt=media\&token=27e139e9-2241-48b7-a850-37ad2747d4cb)

## 分布式锁

1. 节点 A 尝试创建**临时** znode，创建成功则表示获取了这个锁；
2. 此时节点 B 创建锁会失败，转而注册个**监听器**监听这个锁。
3. 节点 A 释放锁就是删除这个 znode，删除后 zk 会通知节点 B，节点 B 可以再次加锁。

## 元数据/配置信息管理

Kafka、Storm、Dubbo 等很多分布式系统都会选用 zk 来做一些元数据、配置信息的管理。

## HA&#x20;

Hadoop、HDFS、Yarn 等很多大数据系统，都选择基于 zk 来开发 HA 高可用机制。原理：一个重要进程一般会做主备两个，主进程挂了立马通过 zk 感知到切换到备用进程。
