添加log.dirs多目录后Kraft模式Kafka无法启动的疑问
问题描述
在Kafka 3.8.0的Kraft模式下,初始配置config/kraft/server.properties的log.dirs为单目录:
log.dirs=/data/kafka-data/kraft-combined-logs-0
修改为多目录后:
log.dirs=/data/kafka-data/kraft-combined-logs-0,/data/kafka-data/kraft-combined-logs-1,/data/kafka-data/kraft-combined-logs-2
重启Kafka时出现错误:
[2024-10-08 16:29:52,265] ERROR Exiting Kafka due to fatal exception (kafka.Kafka$) java.lang.RuntimeException: No `meta.properties` found in /data/kafka-data/kraft-combined-logs-1 (have you run `kafka-storage.sh` to format the directory?) at kafka.server.KafkaRaftServer$.$anonfun$initializeLogDirs$3(KafkaRaftServer.scala:164) at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) at kafka.server.KafkaRaftServer$.initializeLogDirs(KafkaRaftServer.scala:159) at kafka.server.KafkaRaftServer.<init>(KafkaRaftServer.scala:60) at kafka.Kafka$.buildServer(Kafka.scala:82) at kafka.Kafka$.main(Kafka.scala:90) at kafka.Kafka.main(Kafka.scala)
已知新目录需要格式化,但有两个疑问:
- 执行
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties是否会影响现有数据? - 是否有关于
kafka-storage.sh命令的官方文档?
解答
1. 格式化命令对现有数据的影响
不会影响已有的/data/kafka-data/kraft-combined-logs-0目录中的数据。
kafka-storage.sh format命令会智能识别目录状态:
- 仅对未生成
meta.properties文件的新目录执行初始化,写入与指定集群ID匹配的元数据 - 对于已存在有效
meta.properties且集群ID与指定值一致的目录,命令会跳过处理,不会修改或删除任何已有数据
执行前需注意:
- 必须确保Kafka服务处于停止状态,避免运行中操作引发数据不一致
- 提前验证
$KAFKA_CLUSTER_ID与原有目录meta.properties中的cluster.id完全一致,可通过以下命令查看:
cat /data/kafka-data/kraft-combined-logs-0/meta.properties | grep cluster.id
2. kafka-storage.sh命令的官方说明
Kafka官方文档中对该命令有完整说明,它是Kraft模式下专属的存储目录管理工具,核心信息如下:
- 核心功能:初始化Kraft节点的存储目录,生成必要的元数据文件(如
meta.properties),仅适用于Kraft模式,ZooKeeper模式无需使用 - 常用参数:
-t <cluster-id>:指定集群唯一ID,集群内所有节点必须使用相同值-c <config-file>:指定Kafka配置文件路径,命令会从中读取log.dirs等配置format:执行存储目录格式化操作info:查看指定存储目录的元数据信息(集群ID、节点ID等)
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

