最近消失了一段时间,去办理北航的非全研究生入学,回归校园生活感觉还不错,好了不说废话,记录下Zookeeper3.4.14(单集群)、Kafka_2.12-2.2.2(集群)安装。
一、单机环境搭建
1.1 下载
下载对应版本 Zookeeper,这里我下载的版本 3.4.14 。官方下载地址:https://archive.apache.org/dist/zookeeper/
wget方式直接
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper3.4.14.tar.gz
windows下载 上传到服务器
直接浏览器输入链接
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper3.4.14.tar.gz
1.2 解压
tar -zxvf zookeeper-3.4.14.tar.gz
1.3 配置环境变量
vim /etc/profile
添加环境变量
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.14
export PATH=$ZOOKEEPER_HOME/bin:$PATH
使得配置的环境变量生效
source /etc/profile
1.4 修改配置
进入安装目录的 conf/ 目录下,拷贝配置样本并进行修改:
cp zoo_sample.cfg zoo.cfg
指定数据存储目录和日志文件目录(目录不用预先创建,程序会自动创建),修改后完整配置如下:
# 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=/opt/module/zookeeper-3.4.14/data
dataLogDir=/opt/module/zookeeper-3.4.14/log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
配置参数说明:
- tickTime:用于计算的基础时间单元。比如 session 超时:N*tickTime;
- initLimit:用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示;
- syncLimit:用于集群, master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制);
- dataDir:数据存储位置;
- dataLogDir:日志目录;
- clientPort:用于客户端连接的端口,默认 2181
1.5 启动
由于已经配置过环境变量,直接使用下面命令启动即可:
zkServer.sh start
1.6 验证
使用 JPS
验证进程是否已经启动,出现 QuorumPeerMain 则代表启动成功。
二、集群环境搭建
为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里演示搭建一个三
个节点的集群。这里我使用三台主机进行搭建,主机名分别为 hadoop101,hadoop102,
hadoop103。
2.1 修改配置
解压一份 zookeeper 安装包命名zookeeper-cluster,修改其配置文件 zoo.cfg ,内容如下。之后使用 xsync
命令(这个命令最后边介绍)将安装包分发
到三台服务器上:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/module/zookeeper-cluster/data/
dataLogDir=/opt/module/zookeeper-cluster/log/
clientPort=2181
# server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里
# 指名集群间通讯端口和选举端口
server.1=hadoop101:2287:3387
server.2=hadoop102:2287:3387
server.3=hadoop103:2287:3387
修改/etc/profile
#ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper-cluster
export PATH=$ZOOKEEPER_HOME/bin:$PATH
2.2 标识节点
分别在三台主机的 dataDir 目录下新建 myid 文件,并写入对应的节点标识。Zookeeper 集群通过
myid 文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出
Leader 节点。
创建存储目录:
mkdir -vp /opt/module/zookeeper-cluster/data/
创建并分别去三个节点写入节点标识到 myid 文件:
# hadoop101主机
echo "1" > /opt/module/zookeeper-cluster/data/myid
# hadoop102主机
echo "2" > /opt/module/zookeeper-cluster/data/myid
# hadoop103主机
echo "3" > /opt/module/zookeeper-cluster/data/myid
2.3 启动集群
分别在三台主机上,执行如下命令启动服务:
xcall zkServer.sh start
2.4 集群验证
启动后使用 xcall zkServer.sh status
查看集群各个节点状态。三个节点进程均启动成功,并
且 三个节点分别由一个 leader 节点和两个follower 节点。
二、Kafka集群搭建
2.1 下载解压
Kafka 安装包官方下载地址:http://kafka.apache.org/downloads ,本用例下载的版本为 2.2.2
,下载命令:
# 下载
wget https://www-eu.apache.org/dist/kafka/2.2.0/kafka_2.12-2.2.2.tgz
# 解压
tar -xzvf kafka_2.12-2.2.2.tgz -C /opt/module/
这里 j 解释一下 kafka 安装包的命名规则:以
kafka_2.12-2.2.2.tgz
为例,前面的 2.12 代表 Scala 的版本号(Kafka 采用 Scala 语言进行开发),后面的 2.2.2 则代表 Kafka 的版本号。
2.2 配置文件
vim /etc/profile
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka_2.12-2.2.2
export PATH=$KAFKA_HOME/bin:$PATH
source /etc/profile
进入解压目录的 config
目录下 编辑配置文件:
vim server.properties
2.3 修改配置
分别修改配置文件中的部分配置,如下:
# 三台服务器都要配置,且每个节点id必须唯一
broker.id=2
# 各服务器写各自的ip,这里以hadoop102
listeners=PLAINTEXT://hadoop102:9092
advertised.listeners=PLAINTEXT://hadoop102:9092
# log.dirs 路径自己配,单文件夹一定要存在,不会自己生成,如果路径不存在启动会报错。
log.dirs=/opt/module/kafka_2.12-2.2.2/logs
# topic 允许删除配置
delete.topic.enable=true
# 以下配置三台服务器都一样
zookeeper.connect=hadoop101:2181,hadoop102:2181,hadoop103:2181
zookeeper.connection.timeout.ms=60000
这里需要说明的是 log.dirs
指的是数据日志的存储位置,确切的说,就是分区数据的存储位置,而不是程序运行日志的位置。程序运行日志的位置是通过同一目录下的 log4j.properties
进行配置的。
2.4 启动集群
使用xcall 启动三个 Kafka 节点。启动后可以使用 xcall jps
查看进程,此时三个节点分别应该有三个 zookeeper 进程和三个 kafka 进程。
xcall kafka-server-start.sh /opt/module/kafka_2.12-2.2.2/config/server.properties
2.5 创建测试主题
创建测试主题:
bin/kafka-topics.sh --create --bootstrap-server hadoop101:9092 \
--replication-factor 3 \
--partitions 1 --topic my-replicated-topic
创建后可以使用以下命令查看创建的主题信息:
bin/kafka-topics.sh --describe --bootstrap-server hadoop101:9092 --topic my-replicated-topic
可以看到分区 0 的有 0,1,2 三个副本,且三个副本都是可用副本,都在 ISR(in-sync Replica 同步副本) 列表中,其中 1 为首领副本,此时代表集群已经搭建成功。
在hadoop101节点创建一个生产者,并指定一个topic
bin/kafka-console-producer.sh --broker-list hadoop101:9092 --topic my-replicated-topic
在hadoop102节点创建一个消费者,并订阅一个topic
bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic my-replicated-topic --from-beginning
展示其中一个节点的topic列表
bin/kafka-topics.sh --zookeeper hadoop101:2181 --list
其他创建 flume-kafka主题
bin/kafka-topics.sh --create --bootstrap-server hadoop101:9092 \
--replication-factor 3 \
--partitions 1 --topic flume-kafka
查看创建的主题
bin/kafka-topics.sh --zookeeper hadoop001:2181 --list
消费者消费
bin/kafka-console-consumer.sh --bootstrap-server hadoop101:9092 --topic flume-kafka
注意解释一下xcall和xsync
使用前提:3个节点主机之间配置了hosts,ssh免密登录,防火墙关闭等操作
xcall:
#!/bin/bash
#在集群的所有机器上批量执行同一条命令
if(($#==0))
then
echo 请输入您要操作的命令!
exit
fi
echo 要执行的命令是$*
#循环执行此命令
for((i=101;i<=103;i++))
do
echo ---------------------hadoop$i-----------------
ssh hadoop$i $*
done
xsync:
#!/bin/bash
#校验参数是否合法
if(($#==0))
then
echo 请输入要分发的文件!
exit;
fi
#获取分发文件的绝对路径
dirpath=$(cd `dirname $1`; pwd -P)
filename=`basename $1`
echo 要分发的文件的路径是:$dirpath/$filename
#循环执行rsync分发文件到集群的每条机器
for((i=101;i<=103;i++))
do
echo ---------------------hadoop$i---------------------
rsync -rvlt $dirpath/$filename atguigu@hadoop$i:$dirpath
done
root 用户可以将这两个脚本放置在/usr/local/bin 目录下,并授予执行权限
chmod 777 xcall
chmod 777 xsync