实际项目中我们可能在创建topic时没有设置好正确的replication-factor,导致kafka集群虽然是高可用的,但是该topic在有broker宕机时,可能发生无法使用的情况。topic一旦使用又不能轻易删除重建,因此动态增加副本因子就成为最终的选择。
原因分析:
假设我们有3个kafka broker分别broker0、broker1、broker2.
当我们创建的topic有3个分区partition时并且replication-factor为1,基本上一个broker上一个分区。当一个broker宕机了,该topic就无法使用了,因为三个分区只有两个能用,
当我们创建的topic有3个分区partition时并且replication-factor为2时,可能分区数据分布情况是
broker0, partiton0,partiton1,
broker1, partiton1,partiton2
broker2, partiton2,partiton0,
每个分区有一个副本。
当其中一个broker宕机了,kafka集群还能完整凑出该topic的三个分区,例如当broker0宕机了,可以通过broker1和broker2组合出topic的三个分区。
但是如果两个broker宕机,那kakfa集群就无法凑出该topic的三个分区,例如当broker0和broker1宕机后,只有broker2上partation2和partation0可用,此时partation1处于无法使用的状态。
解决办法:动态增加副本数
首先我们配置topic的副本,保存为json文件()
例如, 我们想把hongjiang-test-0422的副本设置为3,(我的kafka集群有3个broker,id分别为0,1,2), json文件名称为1.json
{
"version":1,
"partitions":[
{
"topic":"hongjiang-test-0422","partition":0,"replicas":[0,1,2]},
{
"topic":"hongjiang-test-0422","partition":1,"replicas"