今天忘记了服务器的root密码,所以重置了一下密码,因此重新启动一下服务器。噩梦随之降临。
问题描述和尝试解决
服务器重启后,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)
[1]+ Exit 127 nohup bin/kafka-sever-start.sh config/server.properties > /dev/null 2>&1
但是因为是后台启动的,所以我们不知道出错的原因到底是什么。
查看kakfa根目录下的logs文件夹下的server.log, 也没看到什么有用的信息
排错的过程中参考了很多网上博主的意见,大部分都说修改server.properties中的listenters参数, 但是我试过了,没有用,而且我是在本机的kafka连接本机的zookeeper, 所以并不需要设置这个 listeners参数,采用默认的即可。
如果我的脑子能再争气一点,也就不会忘了密码,也就不用接受kafka的再次考验,每每想到这里,不禁想反手给自己一个大嘴巴子,但还是忍住了,毕竟以后还得靠脸吃饭。
问题解决方法:
其实我们不知道问题出在哪主要是因为没有报错信息,而之所以没有报错信息,是因为我们采用的是后台运行的方式来启动kafka的,所以如果我们采用前台运行的方式启动kafka, 即用正常的方式启动kafka, 那控制台应该就会打印出失败信息了。
事实证明确实如此,我直接输入下面的命令进入kafka 的bin目录后在前台启动kafka
cd bin
./kafka-server-start.sh ../config/server.properties
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/目录。
所以为了保持一致,我们删掉meta.properties文件即可。
为了保险起见,我删掉了kafka的日志文件下的所有文件,让它下次运行时重新生成,这样就不会有参数前后不匹配的问题出现了。
删除文件后,进入kafka的bin目录,运行下面的命令来前台启动kafka
./kafka-server-start.sh ../config/server.properties
发现kafka已经可以正常启动了
测试是否真的启动成功了,我们重新开一个控制台,连接到远程主机后,进入kafka的根目录,查看kafka当前所有的topic, 输入命令后停顿了几秒后没有打印出任何东西就打印出了命令提示符,说明kafka确实是启动成功了,因为我的kafka当前确实没有任何topic, 如果启动失败会有报错,但是没有报错,就说明启动成功了
nohup bin/kafka-sever-start.sh config/server.properties 1>/dev/null 2>&1 &
既然nohup后台启动的方式不行,那就使用守护线程的方式来启动kafka, 也可以达到在后台运行程序的目的。
cd bin
./kafka-server-start.sh -daemon ../config/server.properties
感想:
1、配环境真不是人干的事哇,太玄学了,建议每次登陆服务器之前先心中默念”***, 永远滴神,保佑我这次登陆服务器没毛病“。否则小心***给你扔了个噩梦。
2、部署好环境之后及时创建一个快照,后面可以及时恢复到这个快照状态,避免这么多麻烦事QAQ。
3、遇到问题首先应该想各种办法找到报错信息或者其他有用的提示信息,盲目的在网上找解决方案然后尝试只会浪费时间,有了明确的提示信息再去找解决办法才会事半功倍。就比如这篇文章的问题,刚开始我一直在网上解决方案,尝试了各种方法,浪费了时间不说,最主要还没解决问题。后面把后台启动改成前台启动找到了报错提示,很快就找到了原因所在,最终一步步地解决了问题。