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

ZooKeeper主流框架集成

了解ZooKeeper在主流框架中的集成方式。

Kafka与ZooKeeper集成

集成功能

功能ZooKeeper作用
Broker注册存储Broker元数据
Controller选举选出Controller节点
Topic元数据存储Topic分区信息
ISR列表维护副本同步状态
Consumer偏移量存储消费组偏移量(旧版本)

ZooKeeper存储结构

properties
/brokers
  /ids/[0,1,2]         <- Broker列表
  /topics
    /[topic]/partitions/[0]/state <- 分区状态
/controller             <- Controller节点
/controller_epoch       <- Controller纪元
/consumers              <- 消费组信息(旧版本)

Controller选举流程

XML
1. 各Broker尝试创建/controller临时节点
2. 成功者成为Controller
3. Controller管理分区分配与副本迁移
4. Controller故障重新选举

配置方式

Java
# Kafka server.properties
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
zookeeper.session.timeout.ms=6000
zookeeper.sync.time.ms=2000

Kafka 2.8+变化

Java
KRaft模式:
- 内置元数据管理
- 不依赖ZooKeeper
- 更简单部署架构

注意:ZooKeeper依赖逐步移除

注意:Kafka 2.8+支持KRaft模式,逐步移除ZooKeeper依赖。

HBase与ZooKeeper集成

集成功能

功能ZooKeeper作用
Master选举选出RegionServer Master
Region定位存储Region地址映射
集群状态维护集群健康状态
分布式锁表操作锁
Replication跨集群复制协调

ZooKeeper存储结构

YAML
/hbase
  /master              <- Master地址
  /rs/[regionserver]   <- RegionServer列表
  /table-lock/[table]  <- 表锁
  /region-in-transition <- Region迁移状态
  /replication         <- 复制状态

Region定位流程

Java
1. 客户端访问ZooKeeper获取.meta. Region地址
2. 查询.meta.表获取目标Region地址
3. 直接访问目标RegionServer
4. 缓存Region地址,后续直接访问

配置方式

YAML
<!-- hbase-site.xml -->
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>zk1,zk2,zk3</value>
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
</property>
<property>
    <name>hbase.zookeeper.session.timeout</name>
    <value>180000</value>
</property>

提示:HBase强依赖ZooKeeper,集群故障影响HBase服务。

Dubbo服务发现集成

集成功能

功能ZooKeeper作用
服务注册Provider注册地址
服务发现Consumer获取地址列表
配置管理存储路由规则
动态调整实时推送变更

ZooKeeper存储结构

Java
/dubbo
  /[service]
    /providers/[url1,url2]  <- Provider列表
    /consumers/[url]        <- Consumer列表
    /routers/[rule]         <- 路由规则
    /configurators/[config] <- 配置覆盖

服务注册代码

text
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class)
    .getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://zk1:2181"));
registry.register(URL.valueOf("dubbo://service:20880/com.example.Service"));

服务发现订阅

text
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://zk1:2181"));
registry.subscribe(URL.valueOf("consumer://app/com.example.Service"), new NotifyListener() {
    public void notify(List<URL> urls) {
        // 更新服务列表
    }
});

注意:Dubbo支持多种注册中心,ZooKeeper是默认推荐。

Spring Cloud集成

集成功能

功能实现方式
服务发现Spring Cloud Zookeeper Discovery
配置中心Spring Cloud Zookeeper Config

服务发现配置

text
# application.yml
spring:
  cloud:
    zookeeper:
      connect-string: zk1:2181,zk2:2181,zk3:2181
      discovery:
        enabled: true
        root: /services
      session-timeout: 6000

服务注册

text
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

配置中心

text
# application.yml
spring:
  cloud:
    zookeeper:
      config:
        enabled: true
        root: /config
        profile-separator: ','

配置读取

text
@Value("${db.host}")
private String dbHost;

// 自动从/config/application,dev/db读取

提示:Spring Cloud Zookeeper是轻量级服务发现方案。

要点总结

  • Kafka用ZooKeeper管理Broker和Controller选举
  • Kafka 2.8+ KRaft模式逐步移除ZooKeeper依赖
  • HBase用ZooKeeper做Master选举和Region定位
  • HBase强依赖ZooKeeper,集群故障影响服务
  • Dubbo用ZooKeeper做服务注册发现
  • Spring Cloud Zookeeper实现服务发现和配置中心
  • 各框架集成方式相似,都是注册发现模式

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

← 上一篇 ZooKeeper多集群与容灾架构
下一篇 → ZooKeeper替代方案对比
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

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

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