全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-24 10 分钟 ✍️ juanwangdev

ZooKeeper配置存储与推送

配置中心是ZooKeeper典型应用场景。

配置存储结构设计

路径设计

JSON
/config                    <- 配置根节点
/config/app1               <- 应用1配置目录
/config/app1/db-config     <- 数据库配置
/config/app1/redis-config  <- Redis配置
/config/app1/app-config    <- 应用配置

数据格式

Java
{
  "host": "192.168.1.100",
  "port": 3306,
  "username": "root",
  "password": "xxx",
  "maxPoolSize": 100
}

设计原则

原则说明
按应用分组不同应用配置隔离
按类型分类db、redis、app等分类
层级清晰便于查找和管理
格式统一推荐JSON格式

存储容量

约束说明
单节点数据默认1MB上限
数据量建议配置数据<1KB
节点数量无明确限制

路径命名建议

Java
/config/{env}/{app}/{type}
env: dev、test、prod
app: 应用名称
type: 配置类型

提示:配置数据不宜过大,元数据和配置为主。

配置变更推送

推送机制

text
1. 应用启动读取配置,注册Watcher
2. 管理员修改配置节点
3. 触发NodeDataChanged事件
4. 应用收到通知,重新读取
5. 更新本地缓存,应用新配置

监听代码

text
// 读取并监听配置
byte[] data = zk.getData("/config/app/db", watcher, stat);
Config config = parseConfig(data);

Watcher watcher = new Watcher() {
    public void process(WatchedEvent event) {
        if (event.getType() == EventType.NodeDataChanged) {
            // 重新读取配置
            byte[] newData = zk.getData(event.getPath(), this, null);
            Config newConfig = parseConfig(newData);
            // 更新本地配置
            updateConfig(newConfig);
        }
    }
};

推送特点

特点说明
实时变更立即推送
主动服务端主动通知
节省无需轮询

推送注意事项

注意点说明
Watcher一次性需在回调中重新注册
重连重建会话恢复后需重新监听
数据比对比对版本号确认变更

TreeCache持续监听

text
// 使用TreeCache持续监听
TreeCache cache = TreeCache.newBuilder(client, "/config/app").build();
cache.start();
cache.getListenable().addListener((client, event) -> {
    if (event.getType() == TreeCacheEvent.Type.NODE_UPDATED) {
        // 处理配置变更
        String path = event.getData().getPath();
        byte[] data = event.getData().getData();
        updateConfig(path, data);
    }
});

注意:Watcher一次性触发,回调中必须重新注册。

要点总结

  • 配置存储在ZNode节点数据中
  • 路径按应用和类型分组设计
  • 数据格式推荐JSON,便于解析
  • Watcher监听实现实时推送
  • 推送后重新读取并更新缓存
  • Watcher一次性,需重新注册
  • TreeCache实现持续监听

📝 发现内容有误?点击此处直接编辑

← 上一篇 ZooKeeper分布式锁实现原理
下一篇 → ZooKeeper配置版本与环境隔离
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库