/consumers/[group_id]/owners/[topic]/[broker_id-partition_id]
其中,[broker_id-partition_id]就是一个 消息分区 的标识,节点内容就是该 消息分区 上 消费者的Consumer ID 。
6、消息 消费进度Offset 记录在消费者对指定消息分区进行消息消费的过程中,需要定时地将分区消息的消费进度Offset记录到Zookeeper上,以便在该消费者进行重启或者其他消费者重新接管该消息分区的消息消费后,能够从之前的进度开始继续进行消息消费 。Offset在Zookeeper中由一个专门节点进行记录,其节点路径为:
【kafka面试题:Zookeeper 在 Kafka 中的作用】/consumers/[group_id]/offsets/[topic]/[broker_id-partition_id]
节点内容就是Offset的值 。
7、消费者注册消费者服务器在初始化启动时加入消费者分组的步骤如下
注册到消费者分组 。每个消费者服务器启动时,都会到Zookeeper的指定节点下创建一个属于自己的消费者节点,例如/consumers/[group_id]/ids/[consumer_id],完成节点创建后,消费者就会将自己订阅的Topic信息写入该临时节点 。
对 消费者分组 中的 消费者 的变化注册监听 。每个 消费者 都需要关注所属 消费者分组 中其他消费者服务器的变化情况,即对/consumers/[group_id]/ids节点注册子节点变化的Watcher监听,一旦发现消费者新增或减少,就触发消费者的负载均衡 。
对Broker服务器变化注册监听 。消费者需要对/broker/ids/[0-N]中的节点进行监听,如果发现Broker服务器列表发生变化,那么就根据具体情况来决定是否需要进行消费者负载均衡 。
进行消费者负载均衡 。为了让同一个Topic下不同分区的消息尽量均衡地被多个 消费者 消费而进行 消费者 与 消息 分区分配的过程,通常,对于一个消费者分组,如果组内的消费者服务器发生变更或Broker服务器发生变更,会发出消费者负载均衡 。
以下是kafka在zookeep中的详细存储结构图:
文章插图
补充早期版本的 kafka 用 zk 做 meta 信息存储,consumer 的消费状态,group 的管理以及 offse t的值 。考虑到zk本身的一些因素以及整个架构较大概率存在单点问题,新版本中确实逐渐弱化了zookeeper的作用 。新的consumer使用了kafka内部的group coordination协议,也减少了对zookeeper的依赖
推荐阅读
- 为你揭开玄空飞星风水神秘面纱
- 电饼铛坏了一面还能用吗?电饼铛什么牌子的好
- 螃蟹后面的一坨黄的是什么 螃蟹里面像鸡蛋黄一样的是什么
- 瓷砖表面崩瓷什么原因 瓷砖崩了一点缺口正常吗
- 梦见清水河里抓鱼 梦见清水河里面有很多鱼
- 一文搞懂 Java 线程中断
- 超市卖的全麦面包是真的吗 哪种全麦面包是真的
- 面试 前端面试这些API必须会手写
- 凉席怎样清洗 双面凉席怎么清洗
- 如何挑选虹鳟鱼