二-1, zookeeper在kafka集群中的作用

请添加图片描述

简单来说就是一句话. zk在kafka集群中主要是用来管理broker和consumer, 因为他们在zk上都真实的存了具体数据; 而Producer端直接连接broker,不在zk上存任何数据,只注册监听,监听broker和topic信息。

A: zk管理kafk集群的brokers, 主要是做了以下工作:

  1. broker的注册
  • zk记录了kafka集群所有brokers的存活状态(在/brokers/ids 维护),broker会向zk发送心跳请求来上报自己的状态.
  • 请添加图片描述
  1. 控制器选举
  • kafka集群有多个broker, 其中一个会被选举为控制器(在/controller中维护), 控制器负责 brokers的上下线, 管理整个集群所有分区和副本的状态, 如果某个分区的leader故障了, 控制器会选举出新的leader.

  • 请添加图片描述

  • Leader的选举过程:

    • 请添加图片描述
  1. 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集群的消费者, 主要做了以下工作:

  1. consumer的注册

    1. 和brokers一样, consumer也需要注册, 它会自动注册, 方式也是创建一个临时间点, 当consumer down了之后就是自动销毁.
    2. 这个consumer节点的路径是维护在/consumers/消费者组-随机编号/ids
    3. 请添加图片描述
  2. 分区的注册

    1. kafka的每个partition只能被某个消费者组的同一个consumer消费, kafka必须知道所有的partition与consumer的关系.
  3. 记录消费位置(offset)

    1. kafka 老版本中,consumer 的消费偏移量是默认存储在 zookeeper 中的。新版本中,这个工作由 kafka 自己做了,kafka 专门做了一个 offset manager。

请结合 二, Kafka架构深入2.4.3 小节一起食用更佳.

猜你喜欢

转载自blog.csdn.net/nmsLLCSDN/article/details/121132086