今天忘记了服务器的root密码,所以重置了一下密码,因此重新启动一下服务器。噩梦随之降临。
kafka启动后闪退-已解决_闪退

问题描述和尝试解决

服务器重启后,kafka就得重启,但是我在启动zookeeper后,使用原先在后台启动kafka的命令
nohup bin/kafka-sever-start.sh config/server.properties 1>/dev/null 2>&1 &
并没有启动成功,因为当我通过查看kafka的所有主题来测试是否启动成功时,发现连不上broker
bin/kafka-topics.sh --list --bootstrap-server localhost:9092;
报错如下:
[root@aliyun-lch kafka_2.13-2.6.0]# bin/kafka-topics.sh --list --bootstrap-server localhost:9092;
[2020-11-30 13:33:00,583] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-11-30 13:33:00,686] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-11-30 13:33:00,890] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-11-30 13:33:01,091] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-11-30 13:33:01,593] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-11-30 13:33:02,396] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-11-30 13:33:03,600] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
这个报错信息很明显就是没有启动kafka, 因为没有启动kafka, 所以node等于-1,但是我刚才明明运行了启动命令啊,所以我再次运行启动命令, 然后使用ps查看进程是否启动
kafka启动后闪退-已解决_闪退_02
[1]+  Exit 127                nohup bin/kafka-sever-start.sh config/server.properties > /dev/null 2>&1
但是因为是后台启动的,所以我们不知道出错的原因到底是什么。
查看kakfa根目录下的logs文件夹下的server.log, 也没看到什么有用的信息
kafka启动后闪退-已解决_闪退_03
排错的过程中参考了很多网上博主的意见,大部分都说修改server.properties中的listenters参数, 但是我试过了,没有用,而且我是在本机的kafka连接本机的zookeeper, 所以并不需要设置这个 listeners参数,采用默认的即可。
如果我的脑子能再争气一点,也就不会忘了密码,也就不用接受kafka的再次考验,每每想到这里,不禁想反手给自己一个大嘴巴子,但还是忍住了,毕竟以后还得靠脸吃饭。
kafka启动后闪退-已解决_闪退_04

问题解决方法:

其实我们不知道问题出在哪主要是因为没有报错信息,而之所以没有报错信息,是因为我们采用的是后台运行的方式来启动kafka的,所以如果我们采用前台运行的方式启动kafka, 即用正常的方式启动kafka, 那控制台应该就会打印出失败信息了。
事实证明确实如此,我直接输入下面的命令进入kafka 的bin目录后在前台启动kafka
cd bin
./kafka-server-start.sh ../config/server.properties
控制台成功打印出了我们想要的提示信息
kafka启动后闪退-已解决_kafka_05
把图片中的那段复制如下:
kafka.common.InconsistentClusterIdException: The Cluster ID kqQ_nDLhRueawDs9bNJ9lQ doesn't match stored clusterId Some(d3tnQCC8TkW9xGQOJP2yBg) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.
 可以看出是当前kakfa集群的id和meta.properties文件中的集群id不匹配,当前的cluster_id 是kqQ_nDLhRueawDs9bNJ9lQ 而 系统记录的cluster_id是 d3tnQCC8TkW9xGQOJP2yBg, 所以两者不匹配,导致The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.
meta.properties这个文件的位置在我们在server.properties配置文件中配置的日志目录下。因为我没有修改默认日志路径,所以这里还是/tmp/kafka-logs/目录。
kafka启动后闪退-已解决_kafka_06
所以为了保持一致,我们删掉meta.properties文件即可。
kafka启动后闪退-已解决_闪退_07
为了保险起见,我删掉了kafka的日志文件下的所有文件,让它下次运行时重新生成,这样就不会有参数前后不匹配的问题出现了。
删除文件后,进入kafka的bin目录,运行下面的命令来前台启动kafka
./kafka-server-start.sh ../config/server.properties
发现kafka已经可以正常启动了
测试是否真的启动成功了,我们重新开一个控制台,连接到远程主机后,进入kafka的根目录,查看kafka当前所有的topic, 输入命令后停顿了几秒后没有打印出任何东西就打印出了命令提示符,说明kafka确实是启动成功了,因为我的kafka当前确实没有任何topic, 如果启动失败会有报错,但是没有报错,就说明启动成功了
kafka启动后闪退-已解决_kafka_08
Ctrl + Z强行停止前台kafka程序后,再次后台启动kafka
nohup bin/kafka-sever-start.sh config/server.properties 1>/dev/null 2>&1 &
发现kafka还是会被立即关闭,
kafka启动后闪退-已解决_闪退_09
但是如果再次使用前台启动的方式来启动kafka, 又发现又可以了,然后再次后台启动,还是不行,好吧,跟后台启动杠上了。
既然nohup后台启动的方式不行,那就使用守护线程的方式来启动kafka, 也可以达到在后台运行程序的目的。
cd bin
./kafka-server-start.sh -daemon ../config/server.properties
kafka启动后闪退-已解决_kafka_10
ps,查看进程,没有马上退出,查看当前kafka的所有topic, 没有报错,终于完美解决了。
bin/kafka-topics.sh --list --bootstrap-server localhost:9092;
kafka启动后闪退-已解决_闪退_11
kafka启动后闪退-已解决_闪退_12

感想:

1、配环境真不是人干的事哇,太玄学了,建议每次登陆服务器之前先心中默念”***, 永远滴神,保佑我这次登陆服务器没毛病“。否则小心***给你扔了个噩梦。
kafka启动后闪退-已解决_kafka_13
2、部署好环境之后及时创建一个快照,后面可以及时恢复到这个快照状态,避免这么多麻烦事QAQ。
3、遇到问题首先应该想各种办法找到报错信息或者其他有用的提示信息,盲目的在网上找解决方案然后尝试只会浪费时间,有了明确的提示信息再去找解决办法才会事半功倍。就比如这篇文章的问题,刚开始我一直在网上解决方案,尝试了各种方法,浪费了时间不说,最主要还没解决问题。后面把后台启动改成前台启动找到了报错提示,很快就找到了原因所在,最终一步步地解决了问题。