虚拟机准备
准备三台虚拟机(Zookeeper要求奇数台),操作系统我们选择CentOS7。后面会介绍分别安装JDK8、Zookeeper 和 Kafka的步骤。
三台服务器及对应配置如下所示:
主机名 | IP地址 | myid | broker.id |
---|---|---|---|
hadoop101 | 192.168.88.101 | 1 | 101 |
hadoop102 | 192.168.88.102 | 2 | 102 |
hadoop103 | 192.168.88.103 | 3 | 103 |
注:需要修改三台虚拟机的主机名,并关闭防火墙
安装Java环境
在安装 Zookeeper 和 Kafka 之前,需要先在每台服务器上安装Java环境。这里推荐安装Java8,我们从官网上下载进行安装。
下载JDK8
官方下载页面:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
我下载的版本:jdk-8u241-linux-x64.tar.gz
将下载好的jdk文件传至/opt
目录中
安装JDK8
解压至/usr/local
目录,解压后jdk目录为:/usr/local/jdk1.8.0_241
tar zxvf /opt/jdk-8u241-linux-x64.tar.gz -C /usr/local
设置环境变量
打开/etc/profile
文件
vi /etc/profile
在最后添加环境变量
JAVA_HOME=/usr/local/jdk1.8.0_241
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
刷新配置,使其生效
source /etc/profile
验证
通过检查版本命令来验证是否安装成功
java -version
Zookeeper集群环境搭建
Kafka 使用 Zookeeper 来保存集群的元数据信息和消费者信息,所以要先安装 Zookeeper。我们在这里介绍其集群环境的安装,下面来看详细步骤。
下载Zookeeper
官网下载页面:https://zookeeper.apache.org/releases.html
我下载的版本:Apache Zookeeper 3.6.0
将下载好的文件传至/opt
目录中
安装Zookeeper
解压至/usr/local
目录下,解压后zookeeper目录为/usr/local/apache-zookeeper-3.6.0-bin
tar -zxvf /opt/apache-zookeeper-3.6.0-bin.tar.gz -C /usr/local
配置zookeeper集群环境
在/usr/local/apache-zookeeper-3.6.0-bin
目录下创建data
和logs
目录
cd /usr/local/apache-zookeeper-3.6.0-bin
mkdir data
mkdir logs
配置myid
zookeeper集群需要配置myid
,用于指明自己的ID。该ID需要保持唯一,并且必须是一个整数,可以不连续。
在data
目录中创建myid
文件,并编辑输入编号(每台虚拟机myid
见上面表格)
touch data/myid
vi data/myid
配置zoo.cfg
zoo.cfg
为zookeeper的配置文件,具体配置如下。
在conf
目录下有一个示例的配置文件zoo_sample.cfg
,我们复制一份为zoo.cfg
,并编辑
cp conf/zoo_sample.cfg conf/zoo.cfg
vi conf/zoo.cfg
具体配置如下:
tickTime=2000
clientPort=2181
initLimit=20
syncLimit=5
dataDir=/usr/local/apache-zookeeper-3.6.0-bin/data
dataLogDir=/usr/local/apache-zookeeper-3.6.0-bin/logs
server.1=hadoop101:2881:3881
server.2=hadoop102:2881:3881
server.3=hadoop103:2881:3881
initLimit
用于Leader节点与Follower节点之间建立初始化连接的时间上限。该配置为tickTime
的倍数,所以上面配置的initLimit
=20*2000ms。
syncLimit
表示允许Follower节点与Leader节点处于不同步状态的时间上限。该配置为tickTime
的倍数,所以上面配置的syncLimit
=5*2000ms。
clientPort
为客户端连接的TCP端口
上面配置中列出了群组中所有服务器的地址,其地址遵循 server.X=hostname:peerPort:leaderPort 格式,其中:
- X为服务器的ID,即上面配置的
myid
- hostname为服务器主机名
- peerPort用于节点间通讯的TCP端口
- leaderPort用于Leader选举的TCP端口
分发至其他虚拟机
上面操作在一台虚拟机中进行即可,配置好后,分发至另外两台虚拟机(scp命令需要输入密码)
scp -r /usr/local/apache-zookeeper-3.6.0-bin root@hadoop102:/usr/local/
scp -r /usr/local/apache-zookeeper-3.6.0-bin root@hadoop103:/usr/local/
注:分发后要修改对应的myid
启动Zookeeper服务
启动
sh bin/zkServer.sh start
查看状态
sh bin/zkServer.sh status
三台虚拟机都启动后,查看状态,其中有一台Mode
是leader
,另外台是follower
至此 zookeeper 集群环境搭建完成~
Kafka集群安装
配置好 Java 和 Zookeeper 后,接下来就可以安装 Kafka 了。本文使用的版本为kafka_2.13-2.5.0.tgz
,其中2.13为Scala版本,2.5.0为Kafka版本。
一个独立的Kafka服务器被称为Broker,而一个Kafka集群由若干个Broker组成。下面来看Kafka Broker的安装和集群环境的配置。
下载Kafka
官网下载页面:https://kafka.apache.org/downloads
我下载的版本:kafka_2.13-2.5.0.tgz
将下载好的文件传至/opt
目录中
安装Kafka Broker
解压至/usr/local目录下,解压后kafka目录为/usr/local/kafka_2.13-2.5.0
tar -zxvf /opt/kafka_2.13-2.5.0.tgz -C /usr/local
配置broker
在/usr/local/kafka_2.13-2.5.0
目录中创建data
文件夹,用于存放kafka的消息日志。
cd /usr/local/kafka_2.13-2.5.0
mkdir data
配置server.properties
打开server.properties
配置文件
vi config/server.properties
修改如下配置,其他内容保持不变
port=9092
broker.id=101
log.dirs=/usr/local/kafka_2.13-2.5.0/data
zookeeper.connect=hadoop101:2181/kafka,hadoop102:2181/kafka,hadoop103:2181/kafka
-
port
为Kafka的端口 -
broker.id
为每个broker的标识符,可以设置为任意整数,这个值必须在整个kafka集群中保持唯一。 -
zookeeper.connect
用于连接zookeeper,该配置用逗号分隔一组hostname:port/path
列表,每一部分的含义如下:
- hostname表示zookeeper服务器的主机地址,或IP地址
- port表示zookeeper的客户端端口clientPort
- /path表示kafka在zookeeper中的路径,若该路径不存在,broker会在启动时自动创建。该路径是可选项,默认使用根路径。
log.dirs
用于存储消费数据,可以有多个路径,中间使用逗号隔开。如果使用了多个路径,那么broker将会根据“最少使用”原则,把同一分区的日志片段保存到同一路径下(“最少使用”原则指的是日志片段数目,而不是磁盘大小)。
分发至其他虚拟机
上面操作在一台虚拟机中进行即可,配置好后,分发至另外两台虚拟机(scp命令需要输入密码)
scp -r /usr/local/kafka_2.13-2.5.0 root@hadoop102:/usr/local/
scp -r /usr/local/kafka_2.13-2.5.0 root@hadoop103:/usr/local/
注:分发后要修改对应的broker.id
启动Kafka服务
三台虚拟机都执行如下启动命令
sh bin/kafka-server-start.sh -daemon config/server.properties
至此 kafka 集群环境搭建完成~