副本迁移

Posted allenwas3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了副本迁移相关的知识,希望对你有一定的参考价值。

kafka 非常难,难在 broker 有角色之分,controller 起控制作用,难在副本有角色之分,leader 提供读写服务,所以 broker 会有状态的切换,副本也有状态的切换。

从一个具体的场景切入,4 节点集群(b1, b2, b3, b4),存在 1 个分区 tp0 分布在 (b1, b2) 上,现在通过执行命令行,希望使 tp0 的副本迁移到 (b3, b4) 上。

命令行程序把副本分配的方案写入 zk,controller 监听 zk 的变化,并处理这个请求,代码入口:

// kafka.controller.KafkaController#onPartitionReassignment
* AR             leader/isr
* {1,2}          1/{1,2}           (initial state)
* {1,2,3,4}      1/{1,2}           (step 2)
* {1,2,3,4}      1/{1,2,3,4}       (step 4)
* {1,2,3,4}      3/{1,2,3,4}       (step 7)
* {1,2,3,4}      3/{3,4}           (step 8)
* {3,4}          3/{3,4}           (step 10)

副本在 kafka 集群中的变化如上图,其中涉及的主要单元操作包括:新建副本,选举,停止副本。

副本的状态由 controller 进行管理,controller 决定副本的状态,并通知各 broker 做实际操作。

LeaderAndIsrRequest
  controller 通知 broker,指定分区的 leader, isr 列表,replica 列表。
  这个请求对应的职责:新建副本,通知副本切换成 leader,通知副本切换成 follower。

StopReplicaRequest
  通知 broker 停止副本

 

以上是关于副本迁移的主要内容,如果未能解决你的问题,请参考以下文章

EF6 自定义迁移表名

Kafka partition 副本迁移与broker上下线

hdfs节点退役如何加快副本迁移速度

迁移到 AndroidX 后,findFragmentById 为片段返回 null

【kafka】kafka数据迁移、分区副本重分配

clickhouse集群迁移实践