reassign-partition.sh不再接受log\u dirs参数

yxyvkwin  于 2021-06-04  发布在  Kafka
关注(0)|答案(0)|浏览(209)

我对我的Kafka(v。2.5.0)周末集群。由于主题的数据突然激增,多个驱动器被填满,另外一个代理上的一个驱动器出现故障。这完全是错误的汇合和喜剧。幸运的是,我有足够的容量,我的主题复制足够健壮,可以防止任何数据丢失,但是我必须移动大量的主题分区来平衡磁盘使用。我有6个代理,每个代理有12个数据驱动器( /data01 通过 /data12 ). 这个 log.dirs 每个经纪人的财产是

log.dirs=/data01/logs,/data02/logs,/data03/logs,/data04/logs,/data05/logs,/data06/logs,/data07/logs,/data08/logs,/data09/logs,/data10/logs,/data11/logs,/data12/logs

我可以用它移动一些分区 kafka-reassign-partitions.sh 以及它的 log_dirs 选项,它允许我使用json文件将特定分区移动到特定磁盘,如

{ "partitions":
  [
    {
      "topic":"insights-facts",
      "partition":30,
      "replicas":[12,7,11],
      "log_dirs":["/data01/logs/insights-facts-30", "/data11/logs/insights-facts-30", "/data07/logs/insights-facts-30"]
    }
  ],
  "version":1
}

但是,在某个时候,我的集群发生了一些问题,现在我无法使用 log_dirs 任何成功的选择。当我尝试使用绝对路径作为 log_dirs 价值:

Partitions reassignment failed due to Failed to alter dir for insights-facts-30-12
kafka.common.AdminCommandFailedException: Failed to alter dir for insights-facts-30-12
        at kafka.admin.ReassignPartitionsCommand.$anonfun$alterReplicaLogDirsIgnoreReplicaNotAvailable$1(ReassignPartitionsCommand.scala:610)
        at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:245)
        at scala.collection.Iterator.foreach(Iterator.scala:941)
        at scala.collection.Iterator.foreach$(Iterator.scala:941)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1429)
        at scala.collection.IterableLike.foreach(IterableLike.scala:74)
        at scala.collection.IterableLike.foreach$(IterableLike.scala:73)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:56)
        at scala.collection.TraversableLike.flatMap(TraversableLike.scala:245)
        at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:242)
        at scala.collection.AbstractTraversable.flatMap(Traversable.scala:108)
        at kafka.admin.ReassignPartitionsCommand.alterReplicaLogDirsIgnoreReplicaNotAvailable(ReassignPartitionsCommand.scala:602)
        at kafka.admin.ReassignPartitionsCommand.reassignPartitions(ReassignPartitionsCommand.scala:632)
        at kafka.admin.ReassignPartitionsCommand$.executeAssignment(ReassignPartitionsCommand.scala:221)
        at kafka.admin.ReassignPartitionsCommand$.executeAssignment(ReassignPartitionsCommand.scala:205)
        at kafka.admin.ReassignPartitionsCommand$.main(ReassignPartitionsCommand.scala:65)
        at kafka.admin.ReassignPartitionsCommand.main(ReassignPartitionsCommand.scala)
Caused by: org.apache.kafka.common.errors.LogDirNotFoundException: The user-specified log directory is not found in the broker config.

根据文档,如果我使用“any”作为绝对路径,分区将成功地移动代理,但它将随机选择一个磁盘来使用。我已经验证了我试图移动到的路径实际上存在,除了Kafka想要自己创建的最后一个目录。
我已经试过了,但没有用:
重新启动托管有问题分区的代理
重新启动整个zookeeper集群
重新启动控制器代理
对我所有的经纪人进行滚动重启
有没有办法解决这个错误?最令人沮丧的是,它曾经工作过,我不知道是什么改变使它不再工作了。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题