03、Kafka 集群安装
1、准备工作
首先准备一台虚拟机,centos7系统,先在一台上配置安装后,最后克隆成多台机器。
1.1 安装JDK
(1)下载JDK,上传到 /root/software 路径
下载地址:https://www.oracle.com/cn/java/technologies/downloads/
(2)解压
tar -zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/
(3)配置环境变量
编辑配置文件:
vim /etc/profile
在文本末尾添加:
export JAVA_HOME=/usr/local/jdk1.8.0_411
export PATH=$PATH:$JAVA_HOME/bin
保存并退出,输入下面命令使配置生效:
source /etc/profile
查看是否生效:
echo $JAVA_HOME
结果为我们配置的路径即可。
1.2 zookeeper 下载安装
(1)下载 zookeeper,上传到 /root/software 路径
下载地址:https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
(2)解压
tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz -C /usr/local/
(3)编辑配置文件
进入配置文件路径
/usr/local/apache-zookeeper-3.8.4-bin/conf
修改配置文件名称zoo_sample.cfg 为 zoo.cfg。
mv zoo_sample.cfg zoo.cfg
修改zookeeper数据路径:
dataDir=/usr/local/apache-zookeeper-3.8.4-bin
添加配置:
dataDir=/usr/local/apache-zookeeper-3.8.4-bin/data
dataLogDir=/usr/local/apache-zookeeper-3.8.4-bin/logs
server.1=192.168.135.132:2888:3888
server.2=192.168.135.133:2888:3888
server.3=192.168.135.134:2888:3888
dataDir:服务器存储快照文件目录。
dataLogDir:服务器存日志文件目录。
server.A=B:C:D
含义:
A:节点在集群中的唯一ID,需要与dataDir/myid文件中的内容保持一致,取值范围为1~255。
B:节点的服务器IP地址。
C:集群中Follower节点与Leader 节点之间通信的端口。
D:当集群中的Follower节点宕机或出现故障时,集群进行重新选举Leader时所使用的端口。
(4)在 /usr/local/apache-zookeeper-3.8.4-bin/data 新建一个myid文件,内容是1,表示服务器ID。
echo 1 >/usr/local/apache-zookeeper-3.8.4-bin/data/myid
(5)修改环境变量
vim /etc/profile
添加ZOOKEEPER_HOME,并将其添加到PATH的后面。
export ZOOKEEPER_HOME=/usr/local/apache-zookeeper-3.8.4-bin
export PATH=$PATH:$JAVA_HOME/bin:$KAFKA_HOME/bin:$ZOOKEEPER_HOME/bin
1.3 Kafka 下载安装
(1)下载 Kafka,上传到 /root/software 路径
下载地址:https://mirrors.aliyun.com/apache/kafka/3.7.0/kafka_2.12-3.7.0.tgz
(2)解压
tar -zxvf kafka_2.12-3.7.0.tgz -C /usr/local/
(3)配置环境变量
编辑配置文件:
vim /etc/profile
在文本末尾添加:在PATH的后面添加$KAFKA_HOME/bin
export KAFKA_HOME=/usr/local/kafka_2.12-3.7.0
export PATH=$PATH:$JAVA_HOME/bin:$KAFKA_HOME/bin
保存并退出,输入下面命令使配置生效:
source /etc/profile
查看是否生效:
echo $KAFKA_HOME
结果为我们配置的路径即可。
(4)修改配置文件
修改配置文件
# 当前节点的ID号
broker.id=1
# Kafka 数据保存的目录
log.dirs=/usr/local/kafka_2.12-3.7.0/data
1.4 克隆虚拟机
(1)右键虚拟机,管理,克隆
(2)克隆后,进入虚拟机,查看ip
我的分别是
192.168.135.132、192.168.135.133、192.168.135.134
(3)分别修改 Kafka 中 zookeeper配置
# 当前节点的ID号,三台机器分别设置为1,2,3
broker.id=1
# zookeeper连接,配置为三台机器,最后的/kafka表示会在Zookeeper的根下创建kafka节点,管理所有kafka元数据
zookeeper.connect=192.168.135.132:2181,192.168.135.133:2181,192.168.135.134:2181/kafka
(4)分别修改 zookeeper 的myid配置
vim /usr/local/apache-zookeeper-3.8.4-bin/data/myid
将里面数字根据机器id分别改成 1,2,3
(5)分别启动三台机器 zookeeper
cd /usr/local/apache-zookeeper-3.8.4-bin/bin
sh zkServer.sh start
(6)分别启动三台机器的kafka
cd /usr/local/kafka_2.12-3.7.0
bin/kafka-server-start.sh -daemon config/server.properties
2、问题处理:
1、如果你的zookeeper启动失败,查看日志
报错:Cannot open channel to 2 at election address /192.168.135.133:3888
java.net.NoRouteToHostException: No route to host (Host unreachable)
是因为没有权限开启其他机器的端口,可以去开放指定端口,或者是关闭防火墙。
关闭防火请:
systemctl stop firewalld.service
2、如果你在启动kafka报错,报错日志:
[2024-05-08 00:43:28,805] ERROR Exiting Kafka due to fatal exception during startup. (kafka.Kafka$)
java.lang.RuntimeException: Invalid cluster.id in: /usr/local/kafka_2.12-3.7.0/data/meta.properties. Expected LeVt5skgTWmrMeCQk06U2g, but read dO89ne-BQm-hRzbnkqOQJA
at org.apache.kafka.metadata.properties.MetaPropertiesEnsemble.verify(MetaPropertiesEnsemble.java:516)
at kafka.server.KafkaServer.startup(KafkaServer.scala:250)
at kafka.Kafka$.main(Kafka.scala:112)
at kafka.Kafka.main(Kafka.scala)
[2024-05-08 00:43:28,805] INFO shutting down (kafka.server.KafkaServer)
错误原因分析
直接原因:服务器在重启后出现的问题
根本原因:server.properties和meta.perporties(kafka启动后会在日志目录下生成的配置文件)配置文件的broke.id的值不一样,在我们服务重启后机器重启因meta.properties配置文件没处理掉,所以就会报错
解决方法:
方法一:
1、我们找到我们的server.properties配置文件的log.dirs参数的配置项,找到我们的log配置目录
2、将该目录下的meta.properties删除或别名
rm -rf /usr/local/kafka_2.12-3.7.0/data/meta.properties
方法二:
就是直接手动将meta.properties的值改成server.properties的值一致
2、kafka 在 zookeeper 中的目录说明
2.1 准备工作
(1)进入zookeeper客户端
/usr/local/apache-zookeeper-3.8.4-bin/bin/zkCli.sh
(2)查看目录下内容
ls /
其中 kafka文件夹就是我们上面配置kafka中的 zookeeper.connect 配置时自动创建的。
2.2 /kafka 文件夹说明
查看 /kafka 下文件夹
ls /kafka
(1)cluster
get /kafka/cluster/id
id 代表一个kafka集群包含集群的版本信息,和集群id。
(2)controller
get /kafka/controller
controller 是kafka中非常重要的一个角色,意为控制器,控制 partition 的 leader选举,topic 的crud操作。
brokerid 意为有其id对应的broker承担controller角色。
(2)controller_epoch
get /kafka/controller_epoch
controller_epoch 表示controller 的纪元,每当controller的brokerid更换一次,controller_epoch就会加一。
(3)brokers
ls /kafka/brokers
get /kafka/brokers/ids
ids,表示当前kafka的broker实例列表。
get /kafka/brokers/ids/1
查看实例具体信息。
ls /kafka/brokers/topics
查看现有的topic信息
(4)consumers
老版本用于存储kafka消费者的信息,主要保存对应的offset,新版本中基本不用
此时用户的消费信息,保存在一个系统的topic中:__consumer_offsets
(5)config
存放配置信息
链图片转存中…(img-NUZFOE4l-1715169141277)]
ids,表示当前kafka的broker实例列表。
get /kafka/brokers/ids/1
[外链图片转存中…(img-7dCZl9Zo-1715169141277)]
查看实例具体信息。
ls /kafka/brokers/topics
[外链图片转存中…(img-suYnSnww-1715169141277)]
查看现有的topic信息
(4)consumers
老版本用于存储kafka消费者的信息,主要保存对应的offset,新版本中基本不用
此时用户的消费信息,保存在一个系统的topic中:__consumer_offsets
(5)config
存放配置信息