美文网首页
kafka管理者broker controller

kafka管理者broker controller

作者: matthewfly | 来源:发表于2020-12-04 16:09 被阅读0次

kafka集群是由多个broker构成,broker之间怎么组织管理的呢?


kafka-achitecture.png

1.broker controller简介

  • Controller 是从Kafka集群中选取一个的broker,负责管理topic分区和副本的状态的变化,以及执行重分配分区之类的管理任务。
  • 早期版本kafka依赖zk管理集群,也就是所有broker都去zk节点上注册监听,当节点数据变动时,同步数据到自己缓存中。新版本引入controller来统一管理,只有controller需要监听zk节点,其他broker不再需要完全监听zk。

2.broker controller选举

  • 所有的broker启动后会去zk上注册/controller临时节点,但只有一个broker能够注册成功,这个broker即为contoller,注册成功后会在该节点写入controller信息,如:{“version":1,"brokerid":0,"timestamp":"1605488793510"}。
  • 若controller宕机后,zk上的临时节点会消失,其他broker又会一起去注册,产生新的controller。注册失败的broker叫做broker follower,会监听/controller节点,读取controller的信息并保存到内存中。

3.contoller职责

监听zk对应节点,实时同步集群状态。


image.png

4.topic新建流程

触发的zk节点: /broker/topics


image.png

5.topic分区管理

触发的zk节点:/broker/topics/{topic name}/partitions/{partition id}/state

  • controller会监听zk 的/admin/ressign_part节点,用户执行分区更改脚步的内容会写入该节点,controller读取格式化信息并重新分区。
  • controller监听/broker/topic节点变化信息,监听partition的增减情况,当发生partition增减时,重新执行leader选举和isr同步,并更新所有broker信息。
  • controller监听/broker/ids节点,当有broker宕机时,若宕机的是leader,controller从isr列表中选取新的leader;若isr列表为空,则从所有副本中选取leader;若所有副本列表都为空,则等待副本重新加入。


    image.png

6.broker管理

触发zk节点:/broker/ids

  • 监听broker的加入,更新新加入的broker信息到controller缓存并同步其他broker。已存在的topic分区不变,后续创建的topic将会被分配到该broker。
  • 监听broker的离开,更新新加入的broker信息到controller缓存并同步其他broker。查询leader在宕机broker的topic分区,将这些分区状态改为下线,为其重新选举leader,更新zk上分区信息,并同步最新分区信息到给broker。

7.重新分区监听

触发zk节点:/admin/resign_partitions

  • kafka扩容后,增加的broker不会加入已有topic分区中,需要利用kafka脚本工具手动更新分区分配。
  • kafka脚本将更新分区的元数据写入zk节点,触发controller完成分区的更新。
  • 新加入的broker首先会成为对应分区的一个follower,直到完成分区数据同步后才删除原始分区数据。

8.修改分区优先副本

触发zk节点: /admin/preferred_replica_election

  • 优先副本为下一次leader选举时的首选broker
  • 分区的优先副本为isr中的第一个broker,若需要更新优先副本,可通过kafka脚本更新zk节点。再执行重新分区时,该优先副本将成为leader。

相关文章

网友评论

      本文标题:kafka管理者broker controller

      本文链接:https://www.haomeiwen.com/subject/qrliwktx.html