kafka与zookeeper安装(疯狂踩坑)
文章目录zookeeper3.5.8安装1.集群规划2.解压安装3.配置服务器编号4.配置 zoo.cfg 文件5.集群操作kafka 2.13-2.7.0安装1.安装部署1.集群规划2.jar 包下载2.集群部署坑来了1.zookeeper启动报错2.kafka启动后秒退3.kafka单台机器启动没问题,一旦使用群起脚本就不报错也没有反应4.kafka官方的stop脚本不能关闭进程zookeep
文章目录
zookeeper3.5.8安装
1.集群规划
在 hadoop102、 hadoop103 和 hadoop104 三个节点上部署 Zookeeper。
2.解压安装
1.解压 Zookeeper 安装包到/opt/module/目录下
[mhr@hadoop102 software]$ tar -zxvf zookeeper-3.5.8.tar.gz -C /opt/module/
2.拷贝配置好的 zookeeper 到其他机器上
[mhr@hadoop102 module]$ xsync zookeeper-3.5.8
3.配置服务器编号
1.在/opt/module/zookeeper-3.5.8/这个目录下创建 zkData
[mhr@hadoop102 zookeeper-3.5.8]$ mkdir -p zkData
2.在/opt/module/zookeeper-3.5.8/zkData 目录下创建一个 myid 的文件
[mhr@hadoop102 zkData]$ touch myid
添加 myid 文件,注意一定要在 linux 里面创建,在 notepad++里面很可能乱码
3.编辑 myid 文件
[mhr@hadoop102 zkData]$ vi myid
在文件中添加与 server 对应的编号:
2
4.拷贝配置好的zookeeper配置文件到其他机器上
[mhr@hadoop102 zkData]$ xsync myid
hadoop103和hadoop104做相对应的操作改变文件中编号为3和4
xsync 是一个群发脚本,需要预先对三台机器配置ssh免密登录
1.在/home/mhr 目录下创建 bin 目录,并在 bin 目录下 xsync 创建文件,文件内容如下:
[mhr@hadoop102 ~]$ mkdir bin
[mhr@hadoop102 ~]$ cd bin/
[mhr@hadoop102 bin]$ touch xsync
[mhr@hadoop102 bin]$ vi xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=103; host<105; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
2.修改脚本 xsync 具有执行权限
[mhr@hadoop102 bin]$ sudo chmod 777 xsync
3.调用脚本形式: xsync 文件名称
[mhr@hadoop102 bin]$ xsync /home/mhr/bin
4.配置 zoo.cfg 文件
1.重命名/opt/module/zookeeper-3.5.8/conf 这个目录下的 zoo_sample.cfg 为 zoo.cfg
[mhr@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg
2.打开 zoo.cfg 文件
[mhr@hadoop102 conf]$ vim zoo.cfg
修改数据存储路径配置
dataDir=/opt/module/zookeeper-3.5.8/zkData
增加如下配置
#######################cluster##########################
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
3.配置参数解读
server.A=B:C:D。
A 是一个数字,表示这个是第几号服务器;
集群模式下配置一个文件 myid, 这个文件在 dataDir 目录下,这个文件里面有一个数据
就是 A 的值, Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比
较从而判断到底是哪个 server。
B 是这个服务器的地址;
C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的
Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
4.拷贝配置好的 zookeeper 到其他机器上
[mhr@hadoop102 conf]$ xsync zoo_cfg
5.集群操作
1.分别启动 Zookeeper
[mhr@hadoop102 zookeeper-3.6.2]$ bin/zkServer.sh start
[mhr@hadoop103 zookeeper-3.6.2]$ bin/zkServer.sh start
[mhr@hadoop104 zookeeper-3.6.2]$ bin/zkServer.sh start
2.查看状态
[mhr@hadoop102 zookeeper-3.6.2]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.6.2/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[mhr@hadoop103 zookeeper-3.6.2]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.6.2/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
[mhr@hadoop104 zookeeper-3.6.2]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.6.2/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
3.群起脚本
#!/bin/bash
case $1 in
"start")
for i in hadoop102 hadoop103 hadoop104
do
echo "========== $i =========="
ssh $i '/opt/module/zookeeper-3.6.2/bin/zkServer.sh start'
done
;;
"stop")
for i in hadoop102 hadoop103 hadoop104
do
echo "========== $i =========="
ssh $i '/opt/module/zookeeper-3.6.2/bin/zkServer.sh stop'
done
;;
*)
echo '输入参数应为start或stop'
;;
esac
kafka 2.13-2.7.0安装
1.安装部署
1.集群规划
hadoop102 | hadoop103 | hadoop104 |
---|---|---|
zk | zk | zk |
kafka | kafka | kafka |
2.jar 包下载
http://kafka.apache.org/downloads.html
2.集群部署
1) 解压安装包
[mhr@hadoop102 software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/
2) 修改解压后的文件名称
[mhr@hadoop102 module]$ mv kafka_2.11-0.11.0.0/ kafka
3)在/opt/module/kafka 目录下创建 logs 文件夹
[mhr@hadoop102 kafka]$ mkdir logs
4) 修改配置文件
[mhr@hadoop102 kafka]$ cd config/
[mhr@hadoop102 config]$ vi server.properties
输入以下内容:
#broker 的全局唯一编号,不能重复
broker.id=0
#删除 topic 功能使能,在1.0.0版本后已经默认为true了
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘 IO 的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka 运行日志存放的路径
log.dirs=/opt/module/kafka/logs
#topic 在当前 broker 上的分区个数
num.partitions=1
#用来恢复和清理 data 下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment 文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接 Zookeeper 集群地址
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181
5)配置环境变量
[mhr@hadoop102 module]$ sudo vi /etc/profile
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin
[mhr@hadoop102 module]$ source /etc/profile
6)分发安装包
[mhr@hadoop102 module]$ xsync kafka/
注意:分发之后记得配置其他机器的环境变量
7)分别在 hadoop103 和 hadoop104 上修改配置文件/opt/module/kafka/config/server.properties中的 broker.id=1、 broker.id=2
注: broker.id 不得重复
8) 启动集群
依次在 hadoop102、 hadoop103、 hadoop104 节点上启动 kafka
[mhr@hadoop102 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
[mhr@hadoop103 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
[mhr@hadoop104 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
9)关闭集群
[mhr@hadoop102 kafka]$ bin/kafka-server-stop.sh stop
[mhr@hadoop103 kafka]$ bin/kafka-server-stop.sh stop
[mhr@hadoop104 kafka]$ bin/kafka-server-stop.sh stop
10) kafka 群起脚本
#!/bin/bash
case $1 in
"start")
for i in hadoop102 hadoop103 hadoop104
do
echo "========== $i =========="
ssh $i 'source /etc/profile;/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties'
done
;;
"stop")
for i in hadoop102 hadoop103 hadoop104
do
echo "========== $i =========="
ssh $i 'source /etc/profile;/opt/module/kafka/bin/kafka-server-stop.sh /opt/module/kafka/config/server.properties'
done
;;
esac
11)kafka关闭脚本
#!/bin/bash
PIDS=$(jps -lm | grep -i 'kafka.Kafka' | awk '{print $1}')
if [ -z "$PIDS" ]; then
echo "No kafka server to stop"
exit 1
else
kill -9 $PIDS
fi
坑来了
1.zookeeper启动报错
Zookeeper JAVA_HOME is not set and java could not be found in PATH
解决
进入Zookeeper
的bin
目录下,修改zkEnv.sh
文件
添加 JAVA_HOME
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,CONSOLE"
fi
JAVA_HOME="/opt/module/jdk1.8.0_11"
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then
JAVA="$JAVA_HOME/bin/java"
elif type -p java; then
JAVA=java
else
echo "Error: JAVA_HOME is not set and java could not be found in PATH." 1>&2
exit 1
fi
2.kafka启动后秒退
查看日志后报错信息如下
[2021-02-14 18:20:21,516] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
[2021-02-14 18:20:21,741] ERROR Exiting Kafka due to fatal exception (kafka.Kafka$)
java.lang.VerifyError: Uninitialized object exists on backward branch 50
Exception Details:
Location:
scala/util/matching/Regex.unapplySeq(Ljava/lang/CharSequence;)Lscala/Option; @97: goto
Reason:
Error exists in the bytecode
Bytecode:
0000000: 2ab6 004b 2bb6 004f 4d2a 2cb6 0053 9900
0000010: 6abb 0055 59b2 005a 572c b600 5e3e bb00
0000020: 6059 b700 643a 0419 041d b900 6a02 0003
0000030: 3605 1505 1da2 002f 2c15 0504 60b6 006e
0000040: 3a08 1908 013a 083a 0719 0701 3a07 3a06
0000050: 1904 1906 b600 7257 013a 0615 0504 6036
0000060: 05a7 ffd1 1904 b900 7601 00c0 0078 013a
0000070: 0401 3a06 b700 7bb0 b200 80b0
Stackmap Table:
full_frame(@50,{Object[#2],Object[#140],Object[#57],Integer,Object[#96],Integer},{Uninitialized[#17],Uninitialized[#17]})
full_frame(@100,{Object[#2],Object[#140],Object[#57],Integer,Object[#96],Integer},{Uninitialized[#17],Uninitialized[#17]})
chop_frame(@120,3)
at scala.collection.StringOps$.r$extension(StringOps.scala:843)
at kafka.cluster.EndPoint$.<clinit>(EndPoint.scala:29)
at kafka.server.Defaults$.<clinit>(KafkaConfig.scala:79)
at kafka.server.KafkaConfig$.<clinit>(KafkaConfig.scala:994)
at kafka.metrics.KafkaMetricsConfig.<init>(KafkaMetricsConfig.scala:33)
at kafka.metrics.KafkaMetricsReporter$.startReporters(KafkaMetricsReporter.scala:62)
at kafka.server.KafkaServerStartable$.fromProps(KafkaServerStartable.scala:33)
at kafka.Kafka$.main(Kafka.scala:68)
at kafka.Kafka.main(Kafka.scala)
解决方法:这种情况其实挺常见的,主要就是jdk的版本兼容,我的jdk是1.8.0_11将jdk升级为1.8.0_281。
3.kafka单台机器启动没问题,一旦使用群起脚本就不报错也没有反应
最后在kafkaServer.out
日志中发现bash: jps: command not found
解决
首先确定已经配置了 jdk/bin 的环境变量
可以在启动的命令前增加 source /etc/profile,jps命令即可生效
4.kafka官方的stop脚本不能关闭进程
No kafka server to stop
解决
那么我们自己来写一个脚本,其实也就是使用jps找到kafka的进程号,然后直接kill -9
#!/bin/bash
PIDS=$(jps -lm | grep -i 'kafka.Kafka' | awk '{print $1}')
if [ -z "$PIDS" ]; then
echo "No kafka server to stop"
exit 1
else
kill -9 $PIDS
fi
更多推荐
所有评论(0)