Kafka+Zookeeper安装

本文安装配置环境为多个ubuntu20.04 集群,安装包皆来自apache官网,分别为kafka2.4.1 + zookeeper3.6.3 + jdk1.8,在文章末尾附上自用的zookeeper、kafka群起脚本
注: 本文不包含jdk安装,详情见我的上一篇jdk1.8+hadoop3.2+scala2.12+spark3.1.2配置记录

Zookeeper3.6.3安装配置(已完成解压,目录为/home/hadoop/Zookeeper)

复制配置文件并重命名

cp ~/Zookeeper/conf/zoo_sample.cfg ~/Zookeeper/conf/zoo.cfg

新建Data文件夹,存放运行数据

mkdir ~/Zookeeper/zkData

修改配置文件内容

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/home/hadoop/Zookeeper/zkData
# the port at which the clients will connect
clientPort=2181
#######################cluster##########################
server.1=hadoop101:2888:3888
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
# server.A=B:C:D。
# A,文件myid里面的数据就是A的值,位于zkData根目录;
# B,当前服务器地址;
# C,集群中Follower与Leader交换信息的端口;
# D,执行选举时服务器相互通信的端口。

运行:

/home/hadoop/Zookeeper/bin/zkServer.sh start

不同服务器中应修改对应的myid内容,文件路径为Zookeeper/zkData/myid
将该文件中的数值改成对应服务器序号即可,如我的hadoop101中保持1,hadoop102修改成2,以此类推。

注: 也可参考jdk1.8+hadoop3.2+scala2.12+spark3.1.2配置记录中将bin文件夹注入到.bashrc中作为环境变量使用

Kafka2.4.1安装配置(已完成解压,目录为/home/hadoop/Kafka)

修改Kafka/config/server.properties文件

############################# Server Basics #############################
# broker的全局唯一编号,不能重复
broker.id=1
# 删除topic功能使用
delete.topic.enable=true

############################# Socket Server Settings #############################
# 处理网络请求的线程数量
num.network.threads=3
# 用来处理磁盘IO的线程数量
num.io.threads=8
# 发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
# 接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
# 请求套接字的缓冲区大小
socket.request.max.bytes=104857600

############################# Log Basics #############################
# kafka运行日志存放的路径
log.dirs=/home/hadoop/Kafka/logs
# topic在当前broker上的分区个数
num.partitions=1
# 用来恢复和清理data目录中数据的线程数量
num.recovery.threads.per.data.dir=1

############################# Internal Topic Settings  #############################
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1

############################# Log Flush Policy #############################
# NULL

############################# Log Retention Policy #############################
# 日志segment文件保留的最长时间,超时将被删除
log.retention.hours=168
# 日志段文件的最大大小,超过将新建日志段。
log.segment.bytes=1073741824
# 日志段删除的时间间隔
log.retention.check.interval.ms=300000

############################# Zookeeper #############################
# 配置连接Zookeeper集群地址
zookeeper.connect=hadoop101:2181,hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka
# 连接到ZooKeeper的超时时间(毫秒)
zookeeper.connection.timeout.ms=18000

############################# Group Coordinator Settings #############################
group.initial.rebalance.delay.ms=0

注: 在每个服务器中该文件中的broker.id值应不同
修改kafka中的zookeeper配置,文件路径:Kafka/config/zookeeper.properties,修改其中dataDir为响应路径即可,其他属性按需修改

dataDir=/home/hadoop/Zookeeper

运行:

/home/hadoop/Kafka/bin/kafka-server-start.sh -daemon /home/hadoop/Kafka/config/server.properties

当然在安装过程中也遇到不少问题,一下列出代表性问题,并给出解决方案:
1、使用群启脚本启动kafka时日志报错:

nohup: failed to run command 'java': No such file or directory

解决方案
修改Kafka/bin/kafka-run-class.sh中内容,在该文件头部添加需要使用的JAVA_HOME绝对路径即可(网传在群起脚本中添加的source /etc/profile无果可采取这种办法):

export JAVA_HOME="/home/hadoop/JDK"

2、启动后kafka闪退,日志报错zookeeper连接2181超时
解决方案
该错误有以下几点可能:

  1. 防火墙策略问题
  2. zookeeper未安装
  3. zookeeper配置错误
  4. zookeeper没在启动Kafka之前启动

3、zookeeper本地启动无问题,但群起Zookeeper脚本会导致日志报错JAVA_HOME找不到
解决方案
和问题1一样,添加JAVA_HOME的绝对路径,文件路径为Zookeeper/bin/zkEnv.sh

JAVA_HOME="/home/hadoop/JDK"

4、群起脚本跑完后发现只有一台机器成功运行zookeeper
重点关注上文提及的唯一编号的属性值(zookeeper:myid;kafka:broker.id)是否在每台机器上作出修改,再考虑配置错误

群起脚本附录:

Zookeeper

#! /bin/bash

case $1 in
	"start"){
		for i in `cat /home/hadoop/Hadoop/etc/hadoop/workers`
		do
			echo "========== $i =========="
			ssh $i "/home/hadoop/Zookeeper/bin/zkServer.sh start"
			echo $?
		done
	};;
	"stop"){
		for i in `cat /home/hadoop/Hadoop/etc/hadoop/workers`
		do
			echo "========== $i =========="
			ssh $i "/home/hadoop/Zookeeper/bin/zkServer.sh stop"
			echo $?
		done
	};;
	"status"){
		for i in `cat /home/hadoop/Hadoop/etc/hadoop/workers`
		do
			echo "========== $i =========="
			ssh $i "/home/hadoop/Zookeeper/bin/zkServer.sh status"
			echo $?
		done
	};;
esac

Kafka

#! /bin/bash

case $1 in
	"start"){
		for i in `cat /home/hadoop/Hadoop/etc/hadoop/workers`
		do
			echo "========== $i =========="
			ssh $i "/home/hadoop/Kafka/bin/kafka-server-start.sh -daemon /home/hadoop/Kafka/config/server.properties"
			echo $?
		done
	};;
	"stop"){
		for i in `cat /home/hadoop/Hadoop/etc/hadoop/workers`
		do
			echo "========== $i =========="
			ssh $i "/home/hadoop/Kafka/bin/kafka-server-stop.sh"
			echo $?
		done
	};;
esac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我徐先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值