kafka重分区原理

重分区原理

ReassignPartitionsCommand类
executeAssignment()  这个方法是调了execute以后执行的方法
  1、判断是否有重分区任务在执行,判断条件就是zookeeper的/admin/reassign_partitions路径是否存在,
reassignPartitions()  具体执行更新的方法
  2、在没有任务的情况下,把分配策略更新到zookeeper,也就是/admin/reassign_partitions这个地址,
 
kafka.controller.KafkaController类  监听/admin/reassign_partitions目录,
PartitionReassignment()  
  1、这个方法把当前正在执行重分区的分区放到partitionsBeingReassigned中
maybeTriggerPartitionReassignment()
  2、判断执行重分区的分区是否有变化,如果有执行下面的具体开始重分区的方法
onPartitionReassignment()
  3、这个方法具体执行重分区操作
   * RS = 当前分配的副本集
   * ORS = 分区的原始副本集
   * TRS = 重新分配的(目标)副本集
   * AR = 作为此次重新分配的一部分,我们添加的副本
   * RR = 作为此次重新分配的一部分,我们要删除的副本
   
   1、更新分区所有副本的leder epoch(选举次数) ORS + TRS
   2、把新加的副本放到Replica列表中 AR
   
   TRS=ISR以后
   1、把AR里面的副本转化为OnlineReplica
   2、在内存里面设置Set RS = TRS, AR = [], RR = []
   3、在RS = TRS里面选择leader,发送LeaderAndIsr请求,如果当前leader不在 TRS 中或不活跃,我们将leader移动到 TRS 中的新副本
   4、将RR所有副本设置为OfflineReplica状态,并且在zookeeper里面修改分区isr列表,并仅向Leader发送LeaderAndIsr以通知它缩小的isr
   5、将 RR 中的所有副本移动到 NonExistentReplica 状态。这将发送一个 StopReplica (delete = true) 到
   6、使用RS = TRS更新zookeeper里面的分区副本信息
   7、删除zookeeper的/admin/reassign_partitions路径,如果存在的话
   8、选举leader后,replicas和isr信息发生变化。因此,向每个broker重新发送更新元数据请求。
      一般而言,我们想要实现的目标有两个:
      1. LeaderAndIsrRequest 的副本集中存在的每个副本都会收到发送给它的请求
      2. 从分区的分配中删除的副本将发送给它们的 StopReplica
   9、如果对属于被删除主题的某些分区的重新分配刚刚完成,则发出删除主题线程的信号
   
   * RS                AR          RR          leader     isr
   * {1,2,3}           {}          {}          1          {1,2,3}           (initial state)
   * {4,5,6,1,2,3}     {4,5,6}     {1,2,3}     1          {1,2,3}           (step A2)
   * {4,5,6,1,2,3}     {4,5,6}     {1,2,3}     1          {1,2,3,4,5,6}     (phase B)
   * {4,5,6,1,2,3}     {4,5,6}     {1,2,3}     4          {1,2,3,4,5,6}     (step B3)
   * {4,5,6,1,2,3}     {4,5,6}     {1,2,3}     4          {4,5,6}           (step B4)
   * {4,5,6}           {}          {}          4          {4,5,6}           (step B6)
 
注意:最后一定要在zookeeper里面更新TRS信息,这是唯一持久化分区元数据的地方
 
 
posted on 2021-10-19 17:17  学习的小文  阅读(258)  评论(0)    收藏  举报