Ubuntu 版本为 22.04.1,Kafka 版本为 3.4.0,以 Kraft 模式启动。
打开电脑上的 Linux 虚拟机后,发现 Kafka 挂了,restart 也失败:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
root@node2:/home/uphie# systemctl restart kafka
root@node2:/home/uphie# systemctl status kafka
× kafka.service - Apache Kafka Server
Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2023-04-07 23:19:53 CST; 1min 7s ago
Docs: http://kafka.apache.org/documentation.html
Process: 3601 ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties (code=exited, status=1/FAILURE)
Main PID: 3601 (code=exited, status=1/FAILURE)
CPU: 3.403s
Apr 07 23:19:52 node2 kafka-server-start.sh[3601]: at scala.collection.immutable.List.foreach(List.scala:333)
Apr 07 23:19:52 node2 kafka-server-start.sh[3601]: at kafka.server.BrokerMetadataCheckpoint$.getBrokerMetadataAndOfflineDirs(BrokerMetadataCheckpoint.scala:168)
Apr 07 23:19:52 node2 kafka-server-start.sh[3601]: at kafka.server.KafkaRaftServer$.initializeLogDirs(KafkaRaftServer.scala:144)
Apr 07 23:19:52 node2 kafka-server-start.sh[3601]: at kafka.server.KafkaRaftServer.<init>(KafkaRaftServer.scala:56)
Apr 07 23:19:52 node2 kafka-server-start.sh[3601]: at kafka.Kafka$.buildServer(Kafka.scala:85)
Apr 07 23:19:52 node2 kafka-server-start.sh[3601]: at kafka.Kafka$.main(Kafka.scala:93)
Apr 07 23:19:52 node2 kafka-server-start.sh[3601]: at kafka.Kafka.main(Kafka.scala)
Apr 07 23:19:53 node2 systemd[1]: kafka.service: Main process exited, code=exited, status=1/FAILURE
Apr 07 23:19:53 node2 systemd[1]: kafka.service: Failed with result 'exit-code'.
Apr 07 23:19:53 node2 systemd[1]: kafka.service: Consumed 3.403s CPU time.
由于展示的不全,用 journalctl
排查:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@node2:/home/uphie# journalctl -xe | grep kafka-server-start.sh
Apr 07 23:18:37 node1 kafka-server-start.sh[3097]: [2023-04-07 23:18:37,960] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
Apr 07 23:18:38 node1 kafka-server-start.sh[3097]: [2023-04-07 23:18:38,807] INFO Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation (org.apache.zookeeper.common.X509Util)
Apr 07 23:18:38 node1 kafka-server-start.sh[3097]: [2023-04-07 23:18:38,993] WARN No meta.properties file under dir /tmp/kraft-combined-logs/meta.properties (kafka.server.BrokerMetadataCheckpoint)
Apr 07 23:18:39 node1 kafka-server-start.sh[3097]: [2023-04-07 23:18:38,997] ERROR Exiting Kafka due to fatal exception (kafka.Kafka$)
Apr 07 23:18:39 node1 kafka-server-start.sh[3097]: org.apache.kafka.common.KafkaException: No `meta.properties` found in /tmp/kraft-combined-logs (have you run `kafka-storage.sh` to format the directory?)
Apr 07 23:18:39 node1 kafka-server-start.sh[3097]: at kafka.server.BrokerMetadataCheckpoint$.$anonfun$getBrokerMetadataAndOfflineDirs$2(BrokerMetadataCheckpoint.scala:179)
Apr 07 23:18:39 node1 kafka-server-start.sh[3097]: at scala.collection.immutable.List.foreach(List.scala:333)
Apr 07 23:18:39 node1 kafka-server-start.sh[3097]: at kafka.server.BrokerMetadataCheckpoint$.getBrokerMetadataAndOfflineDirs(BrokerMetadataCheckpoint.scala:168)
Apr 07 23:18:39 node1 kafka-server-start.sh[3097]: at kafka.server.KafkaRaftServer$.initializeLogDirs(KafkaRaftServer.scala:144)
Apr 07 23:18:39 node1 kafka-server-start.sh[3097]: at kafka.server.KafkaRaftServer.<init>(KafkaRaftServer.scala:56)
Apr 07 23:18:39 node1 kafka-server-start.sh[3097]: at kafka.Kafka$.buildServer(Kafka.scala:85)
Apr 07 23:18:39 node1 kafka-server-start.sh[3097]: at kafka.Kafka$.main(Kafka.scala:93)
Apr 07 23:18:39 node1 kafka-server-start.sh[3097]: at kafka.Kafka.main(Kafka.scala)
查看 Kafka 日志,
1
2
3
4
5
6
7
8
9
10
11
root@node2:/home/uphie# tail /opt/kafka/logs/server.log
[2023-04-07 23:19:52,823] ERROR Exiting Kafka due to fatal exception (kafka.Kafka$)
org.apache.kafka.common.KafkaException: No `meta.properties` found in /tmp/kraft-combined-logs (have you run `kafka-storage.sh` to format the directory?)
at kafka.server.BrokerMetadataCheckpoint$.$anonfun$getBrokerMetadataAndOfflineDirs$2(BrokerMetadataCheckpoint.scala:179)
at scala.collection.immutable.List.foreach(List.scala:333)
at kafka.server.BrokerMetadataCheckpoint$.getBrokerMetadataAndOfflineDirs(BrokerMetadataCheckpoint.scala:168)
at kafka.server.KafkaRaftServer$.initializeLogDirs(KafkaRaftServer.scala:144)
at kafka.server.KafkaRaftServer.<init>(KafkaRaftServer.scala:56)
at kafka.Kafka$.buildServer(Kafka.scala:85)
at kafka.Kafka$.main(Kafka.scala:93)
at kafka.Kafka.main(Kafka.scala)
启动失败的原因是在目录 /tmp/kraft-combined-logs
中没有文件 meta.properties
,获取不到节点信息和 cluster ID,启动失败。
但我曾经执行过 /opt/kafka/bin/kafka-storage.sh format -t blibId1XQpSU_RS4_FEkow -c /opt/kafka/config/kraft/server.properties
生成过 meta.properties
。
原因在于笔者在 /opt/kafka/config/kraft/server.properties
中设置的日志目录是 /tmp/kraft-combined-logs
,虚拟机重启后目录 /tmp
就被清空了。
解决方法:
修改 /opt/kafka/config/kraft/server.properties
中的 log.dir
为其他非 /tmp
目录,再重新生成 meta.properties
和启动 Kafka。