Kafka本地集群安装配置
本地环境
三台centos 7, 免密登录安排上。
master-node:192.168.142.129
node1:192.168.142.130
node2: 192.168.142.131
/etc/hosts
192.168.142.129 master-node
192.168.142.130 node1
192.168.142.131 node2
xsync
#!/bin/bash
# 1.判断参数个数
if [ $# -lt 1 ]
then
echo Arguements Error!
exit;
fi
# 2 获取文件名称
# 分发非绝对路径的文件需要先进入他的父目录下再执行这个命令,即如果需要分发/home/aaa这个文件或文件夹,则需要先进入到/home目录下,再执行xsync aaa
# 分发绝对路径的文件直接执行/home/aaa即可
fname=$1
fname=${fname%/}
echo fname=$fname
# 3 获取绝对路径文件目录
pdir=`cd -P $(dirname $1); pwd`
echo pdir=$pdir
# 4.遍历集群所有从机IP(也可以将ip换成主机名,但是要配置好hosts文件,让主机可以正确的通过主机访问到正确的IP)
for host in node1 node2
do
echo =============== $host ==================
# 判断输入是否为文件夹,文件夹不需要拼接
if [[ $fname == ./* ]]
then
fname1=${fname#./}
rsync -rvl $pdir/$fname1 root@$host:$pdir
else
if [[ $fname == /* ]]
then
rsync -rvl $fname root@$host:$pdir
else
rsync -rvl $pdir/$fname root@$host:$pdir
fi
fi
done
安装JDK11
jdk8有问题版本过低。
先升级jdk11
安装ZooKeeper
关闭防火墙,关闭防火墙,关闭防火墙
重要的事情说三遍,不关闭到时问题一大堆。
systemctl stop firewalld
下载安装
# 下载
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
# 解压
tar zxvf apache-zookeeper-3.8.0-bin.tar.gz
mv apache-zookeeper-3.8.0-bin /opt/zookeeper
# 自定义一个环境变量文件/etc/myenv
export ZOOKEEPER_HOME=/opt/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
# source 导入一下路径
source /etc/myenv
echo $PATH
修改配置文件
进入/opt/zookeeper/conf目录,复制 zoo_sample.cfg修改为zoo.cfg
cp zoo_sample.cfg zoo.cfg
zoo.cfg配置文件
# 服务器心跳时间,单位为msg
tickTime=2000
# 投票选举新loeader的初始化时间
initLimit=10
# leader与follower心跳检测最大容忍时间,响应超过syncLimit*tickTime, leader认为follower死掉从服务器列表中删除 follower
syncLimit=5
# 数据目录
dataDir=/tmp/zookeeper/data
# 日志目录
dataLogDir=/tmp/zookeeper/log
# 对外服务端口
clientPort=2181
数据目录和日志目录,默认是没有的,需要创建 一下。
mkdir -p /tmp/zookeeper/data
mkdir -p /tmp/zookeeper/log
在数据目录下创建一个myid文件,并写入一个数值,比如0
myid存放的是服务 器的编号。
cd /tmp/zookeeper/data
touch myid
# 写入0
启动zookeeper
zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
基础命令
#启动服务
zkServer.sh start
#停止服务
zkServer.sh stop
#重启服务
zkServer.sh restart
#查看服务状态
zkServer.sh status
集群配置
在3台机器的zoo.cfg文件中添加以下配置:
server.0=192.168.142.129:2888:3888
server.1=192.168.142.130:2888:3888
server.2=192.168.142.131:2888:3888
server.0=master-node:2888:3888
server.1=node1:2888:3888
server.2=node2:2888:3888
server.A = B: C: D。
其中A是一个数字(对应myid文件里的值 ,代表服务器编号)。集群中每台服务器的编号必须唯一。
B代表服务器的IP地址。
C表示服务器与集群中的leader服务器交换信息的端口。
D表示选举服务器相互通信的端口。
如果是集群需要把所有都启动,不然通过不了选举,没有leader
把三个都启动,再通过zkServer.sh status 查看状态
分别有follower和leader
zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
// Mode: leader
#### 集群启动/停止/状态脚本
#! /bin/bash
case $1 in
"start"){
for i in master-node node1 node2
do
echo --------------- zookeeper $i 启动 ----------------
ssh $i "/opt/zookeeper/bin/zkServer.sh start"
done
};;
"stop"){
for i in master-node node1 node2
do
echo --------------- zookeeper $i 停止 ----------------
ssh $i "/opt/zookeeper/bin/zkServer.sh stop"
done
};;
"status"){
for i in master-node node1 node2
do
echo --------------- zookeeper $i 状态 ----------------
ssh $i "/opt/zookeeper/bin/zkServer.sh status"
done
};;
esac
脚本启动:
/opt/shell/zk.sh status
查看一下启动状态,1个leader,2个follower
到这里zk集群就搞定收工了。
安装Kafka
下载安装
wget https://downloads.apache.org/kafka/3.3.1/kafka_2.12-3.3.1.tgz
解压到 /opt/kafka
将/opt/kafka添加到变量路径 中
编辑/etc/myenv,添加变量
export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
### 修改配置文件
修改/opt/kafka/conf/server.properties
主要配置几个参数:
# broker编号
broker.id = 0
# 对外提供的服务入口地址
listeners = PLAINTEXT://node1:9092
# 存放消息日志的地址
log.dirs=/tmp/kafka-logs
# Kafka所需的zookeeper集群地址
zookeeper.connect=192.169.142.129:2181,192.169.142.130:2181,192.169.142.131:2181/kafka
如果是单机,修改以上就可以启动了,
集群模式
集群模式下,需要对每 个单机配置做相应修改,确保集群中每 个broker的broker.id配置参数值不一样,以及listeners配置参数也需要修改为与broker对应的IP地址或者域名,之后就可以各自启动服务。
注意:在启动Kafka服务之前同样需要确保zookeeper.connect参数所配置的ZooKeeper服务已经正确启动。
启动
kafka-server-start.sh config/server.properties &
集群启动脚本
#! /bin/bash
case $1 in
"start"){
for i in master-node node1 node2
do
echo --------------- kafka $i 启动 ----------------
ssh $i "/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties"
done
};;
"stop"){
for i in master-node node1 node2
do
echo --------------- zookeeper $i 停止 ----------------
ssh $i "/opt/kafka/bin/kafka-server-stop.sh"
done
};;
esac
测试
创建一个主题
kafka-topics.sh --create --topic topic-test --bootstrap-server node1:9092 --replication-factor 3 --partitions 4
查看
kafka-topics.sh --bootstrap-server node2:9092 --list
任务一台机器都能查看到刚创建的主题 ,说明集群已经搭建成功 了。
// topic-demo
// topic-test
开启生产者和消费者终端进行测试
开启一个消费者监听topic-demo主题
kafka-console-consumer.sh --bootstrap-server node1:9092 --topic topic-demo
# 如果有消息这里将会接收到
开启一个生产者进行消息传递
kafka-console-producer.sh --broker-list node1:9092 --topic topic-demo
# 在终端输入要传递的消息,输入完成后,消费者将收到这条消息
这里看到传递和收取都正常显示。
到此集群搭建完成。