版本 1.0.0
概述
本文介绍了 kafka 中 zookeeper 的整体实现。
最初 kafka 使用同步的方式访问 zookeeper。但是对于 partition 个数很多的cluster,同步的访问方式会使得集群陷入瓶颈。
新的 zookeeper 主要分为这两大部分:
#3472 增加了异步访问 zookeeper。
#3765 使用 zookeeperClient 替换了 zkClient。
实现
整个 zookeeper 交互分为了 4 个文件:
- ZooKeeperClient : 一个新的 zookeeper 客户端,允许用户并发访问。
- ZKData : 保存 zookeeper 中相关 path。例如
/brokers
。 - KafkaZkClient : 提供一些和 kafka zookeeper 相关的高级的函数, 在 kafkaApi 等其他地方使用。
- AdminZkClient : 进一步封装 KafkaZkClient ,提供管理 kafka 集群的函数,例如
createTopic
。
zookeper 上保存元数据。
- cluster
- controller
- controller_epoch
- brokers: 保存了 brokers 的 ids, topics, seqid
- zookeeper
- admin
- isr_change_notification
- consumers
- log_dir_event_notification
- latest_producer_id_block
- config