kafka-remove-partition.sh不再接受logdirs参数



周末我的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.

根据文档,如果我使用";任何";作为绝对路径,分区将成功地移动代理,但它将随机选择一个磁盘来使用。我已经验证了我试图移动的路径是否真的存在,除了Kafka想要自己创建的最后一个目录。

我已经尝试过了,但没有成功:

  • 重新启动托管有问题分区的代理
  • 重新启动我的整个动物园管理员集群
  • 重新启动控制器代理
  • 滚动重新启动我的所有经纪人

有什么想法可以解决这个错误吗?最令人沮丧的是,它曾经是有效的,我不知道是什么改变使它不再有效。

我不知道它是否仍然相关,但您的JSON文件看起来有问题。从log_dirs数组中删除/(topic(-(partition(部分,以便使目录与server.properties中的目录匹配。这几乎就是错误消息告诉你的。应该是这样的:

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

最新更新