我对我的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集群
重新启动控制器代理
对我所有的经纪人进行滚动重启
有没有办法解决这个错误?最令人沮丧的是,它曾经工作过,我不知道是什么改变使它不再工作了。
暂无答案!
目前还没有任何答案,快来回答吧!