二-1, zookeeper在kafka集群中的作用
简单来说就是一句话. zk在kafka集群中主要是用来管理broker和consumer, 因为他们在zk上都真实的存了具体数据; 而Producer端直接连接broker,不在zk上存任何数据,只注册监听,监听broker和topic信息。
A: zk管理kafk集群的brokers, 主要是做了以下工作:
broker的注册
- zk记录了kafka集群所有brokers的存活状态(在/brokers/ids 维护),broker会向zk发送心跳请求来上报自己的状态.
控制器选举
-
kafka集群有多个broker, 其中一个会被选举为控制器(在/controller中维护), 控制器负责 brokers的上下线, 管理整个集群所有分区和副本的状态, 如果某个分区的leader故障了, 控制器会选举出新的leader.
-
-
Leader的选举过程:
topic的注册和配置
-
zk(在/brokers节点下)存储了所有的topic的注册信息, 包括topic列表, 每个topic 的partition数量, 副本在哪一个broker(ISR)等等
-
-
同时,在zk的
/brokers/topics/主题/分区号
路径下, 我们可以看到每个分区的leader以及这个分区的ISR. -
ISR(in-sync replica) 是 partition 的一组同步集合,就是所有 follower 里面同步最积极的那部分。
-
一条消息只有被 ISR 中的成员都接收到,才被视为“已同步”状态。
-
只有处于 ISR 集合中的副本才有资格被选举为 leader。
-
zookeeper 记录着 ISR 的信息,而且是实时更新的,只要发现其中有成员不正常,马上移除。****
B: zk管理kafka集群的消费者, 主要做了以下工作:
-
consumer的注册
- 和brokers一样, consumer也需要注册, 它会自动注册, 方式也是创建一个临时间点, 当consumer down了之后就是自动销毁.
- 这个consumer节点的路径是维护在
/consumers/消费者组-随机编号/ids
-
分区的注册
- kafka的每个partition只能被某个消费者组的同一个consumer消费, kafka必须知道所有的partition与consumer的关系.
-
记录消费位置(offset)
- kafka 老版本中,consumer 的消费偏移量是默认存储在 zookeeper 中的。新版本中,这个工作由 kafka 自己做了,kafka 专门做了一个 offset manager。
请结合 二, Kafka架构深入2.4.3 小节一起食用更佳.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)