文章目录
友情提示:这是一篇踩坑记录,请看耐心完之后,再参考操作!!!
先下载一个可视化工具
https://www.kafkatool.com/download.html
下载源码包
http://kafka.apache.org/downloads.html
两个选哪个都行。
举例:kafka_2.12-3.3.1.tgz
由于服务器上,kafka是用scala写的
前面的2.12表示的是用这个版本的scala开发的,而后面的3.3.1是kafka版本。
在2.8.0版本的kafka之前,必须要部署zookeeper才行
从2.8.0开始,kafka不需要zookeeper帮它管理集群了。
上传解压
tar -zxvf 压缩包名称
解压完毕后将文件夹重命名为kafka
,想保留版本号名称方便管理也行,自己意愿。
内部结构如下:
修改 config/server.properties
进入到config
文件夹下,找到server.properties
:
参考B站尚硅谷:https://www.bilibili.com/video/BV1vr4y1677k?
红色标注出的部分是在配置文件中必须手动修改的内容:
配置环境变量
vim /etc/profile
添加:
export KAFKA_HOME=//home/software/kafka
export PATH=$PATH:$KAFKA_HOME/bin
关于重新配置环境变量
B站尚硅谷老师的
kafka
视频中,修改的环境变量路径是/etc/profile.d/my_env.sh
有些疑惑,为什么我们的环境变量文件不一样?
在原本的 /etc/profile
文件中有这么一段话:
告诉我们:
直接修改这个profile文件并不是一个好办法,最好是在
/etc/profile.d/
这个目录下,配置环境变量。
那怎么配置呢?
翻到/etc/profile
的最下面:
/etc/profile
会自行去遍历执行/etc/profile.d
这个文件夹下所有的.sh文件,并且上面的注释中也解释了,是login shell
,登录即生效。
所以,我们要新增或修改某个环境变量,都在/etc/profile.d
文件夹下。
先挪动JDK环境变量试试:
删掉/etc/profile
下的jdk环境变量,在/etc/profile.d
文件夹下新建一个my_env.sh
保存退出后刷新环境变量:
source /etc/profile
验证一下jdk是否还在:
直接重启,再次验证:
证实了操作可行以后,把之前配置的环境变量都挪过去:
保存退出后刷新环境变量:
source /etc/profile
验证MySQL可用:
验证redis可用:
其实也可以在/etc/profile.d
文件夹下,Java建一个.sh,MySQL也建一个,Redis也建一个……
我自己觉得文件太多反而麻烦,只建一个。
觉得我没说清,可以自行百度或者C一下
启动kafka服务(启动失败及错误分析)
切换到bin目录下
cd /home/software/kafka/bin/
bin目录下有各种kafka操作
启动kafka
kafka-server-start.sh -daemon ../config/server.properties
解释:
- kafka-server-start.sh 启动程序
- -daemon 守护线程
- …/config/server.properties 根据指定配置文件启动
启动失败!
由于没有输出错误,只能去找日志:
kafkaServer.out
log4j:ERROR Could not read configuration file from URL [file://home/software/kafka/bin/…/config/log4j.properties].
java.net.UnknownHostException: home
错误信息表示它无法根据这个路径读取路径
先寻找这个文件,它是存在的:
主要原因:
java.net.UnknownHostException: home
主机找不到,联合上文中的server.propertoes
,猜测可能是server.propertoes
中直接写master,IP地址没有根据主机名映射过去。
启动成功后又挂了
这里发现了很多问题:
1、我使用的是3.2.1版本,这个配置走的还是zookeeper的路子,我如何才能使用zookeeper启动呢?
2、在阅览群贴的过程中发现一个大问题,kafka从3.0.0版本开始就弃用Java8了
我他喵的装的是jdk8啊!!!
部署到这一步,我开始思考是不是jdk版本过低导致的。
要么降版本到3.0以下,要么换jdk 成Java11及以上。
事情到了这一步,我还是想试试,
寻找启动错误的原因
解压后的jdk11文件夹
切换到bin目录下:
手动生成jre
./jlink --module-path jmods --add-modules java.desktop --output jre
生成的jre文件夹到bin目录下了,我们挪到和bin同一级。
配置环境变量:
刷新环境变量让JDK11生效:
启动依旧报原之前的错误,说明与jdk版本无关。
这时意识到现在用的这种方式,配置的是zookeeper启动通信,很大可能性是因为我没有安装zookeeper启动或是没有启动自带的zookeeper原因。
如果是因为zookeeper的问题,因为我没有自己装zookeeper,kafka自带的zookeeper是不是需要我提前手动启动?
使用自kafka带的zookeeper启动
kafka是自带zookeeper的:
在kafka文件夹下新建一个zookeeper文件夹,用来存放zookeeper的数据及日志文件:
修改kafka /config
下的zookeeper.properties
:
clientPort=2181
maxClientCnxns=100
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/software/kafka/zookeeper/data
dataLogDir=/home/software/kafka/zookeeper/dataLog
server.0=192.168.253.10:12888:13888
在data文件夹下新建一个myid
文件,内容就写0
,就是server.0
的0
。
启动zookeeper服务
kafka目录下执行:
./bin/zookeeper-server-start.sh config/zookeeper.properties &
zookeeper成功启动,但是仍旧无法启动kafka
把报错的log4j的路径给加入环境变量:
export KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:/home/software/kafka/config/log4j.properties
确认kafka
自带的zookeeper
启动成功后,再次尝试启动kafka
:
依旧失败。
踩坑!
之前有博客说进入日志文件夹修改这个文件:
把cluster.id
修改跟zookeeper中server.x
一样是错的!
要根据zookeeper的服务日志中的报错修改:
kafka.common.InconsistentClusterIdException: The Cluster ID
VEAcwxN3TKG4Ktean19zJg
doesn’t match stored clusterId Some(CdOlid3QR-SijiAl5flm1Q
) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.
at kafka.server.KafkaServer.startup(KafkaServer.scala:230)
at kafka.Kafka$.main(Kafka.scala:109)
at kafka.Kafka.main(Kafka.scala)
意思是这两个cluster id不一样,改成和前者一样的。
保存后关闭之前的服务,重新启动
最终的“胜利”
想知道我最终怎么解决的吗?
修改server.properties
中的延迟为6000,默认18000
前面的步骤也很重要。
启动失败总结
好了,总结一下失败原因:
1、确保虚拟机时间正确,集群则需要保证时间同步
2、直接通过config文件夹下的server.properties
文件启动,使用的zookeeper方式,如果没有自行安装zookeeper,可以先启动kafka自带的zookeeper。
3、如果报错找不到log4j
的路径,先加入环境变量
4、kafka自带的zookeeper,是通过config文件夹下的zookeeper.properties
启动。新增内容如下:
clientPort=2181
maxClientCnxns=100
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/software/kafka/zookeeper/data
dataLogDir=/home/software/kafka/zookeeper/dataLog
server.0=192.168.253.10:12888:13888 // server.x,例如server.1顺序数
同时还要保证data数据文件夹下有一个myid
文件夹,里面的内容与server.x
中的x
一致。
6、logs
文件夹下,server.log
会包含服务信息,可以根据里面的报错排查问题。
5、如果上述从操作都不行,尝试修改server.propertities
中的延迟,改小6000,或者改大。
花了一下午踩坑,血的教训!
当前已经解决使用kafka自带的zookeeper启动问题,并且将jdk升为Java11
下一篇,不使用zookeeper开启kafka服务,测试新版kafka的常用操作命令。