目录
1、环境准备
2、搭建ZooKeeper集群
配置文件
节点标记
环境变量
启动集群
数据同步测试
故障测试
3、搭建 Kafka 集群
配置文件
环境变量
配置其他机器
启动服务
4、集群测试
创建 Topic
显示 Topic 配置
创建 Producer
创建consumer
删除Topic
查看Zookeeper元数据
一个Broker就是一个kafka服务,三种安装Kafka的方式,分别为:单节点单Broker部署、单节点多Broker部署、集群部署(多节点多Broker)。实际生产环境中使用的是第三种方式,以集群的方式来部署Kafka。
1、环境准备
主机名 | IP | 应用 |
CentOS_JClouds | 192.168.137.253 | Kafka + ZooKeeper |
CentOS_Book | 192.168.137.252 | Kafka + ZooKeeper |
CentOS_Client01 | 192.168.137.6 | Kafka + ZooKeeper |
由于zookeeper依赖java环境,所以我们需要安装jdk,官网建议最低安装jdk 1.8版本
# 安装JDK
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
# 配置环境变量
vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8.0_171
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
source /etc/profile
2、搭建ZooKeeper集群
配置文件
# 解压安装装包
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /usr/local/
# 创建内存数据库快照存放目录
mkdir -p /data/zk/data
mkdir -p /data/zk/datalog
# 修改配置文件
cd /usr/local/apache-zookeeper-3.7.1-bin/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
#----------------------------------zoo.cfg-------------------------------
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zk/data #修改这一行为我们创建的目录
dataLogDir=/data/zk/datalog #添加这一行
clientPort=2181
# 三个节点配置,格式为:
# server.服务编号=服务地址、LF通信端口、选举端口
server.1=cong11:2888:3888
server.2=cong12:2888:3888
server.3=cong13:2888:3888
#----------------------------------zoo.cfg-------------------------------
注:server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
如果需要配置Observer,按照如下配置
peerType=observer
server.1=cong11:2888:3888:observer
server.2=cong12:2888:3888
server.3=cong13:2888:3888
节点标记
myid配置:在/data/zk/data设置myid, 这个myid的数字跟配置文件里面的server id对应
# JClouds
echo 1 > /data/zk/data/myid
# Book
echo 2 > /data/zk/data/myid
# Client01
echo 3 > /data/zk/data/myid
环境变量
vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/apache-zookeeper-3.7.1-bin
export PATH=$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile
启动集群
# 启动三台机器zookeeper
zkServer.sh start
# 查看集群状态
zkServer.sh status
数据同步测试
# Clouds连接Zookeeper创建新的节点
create /testNode 123
故障测试
关掉JClouds(主)的ZooKeeper服务,其他节点选举为新的主,再将旧主(JClouds)重启
[root@JClouds local]# zkServer.sh stop
# 查看其他服务的状态
[root@Client01 conf]# zkServer.sh status
重新启动JClouds,查看服务状态
3、搭建 Kafka 集群
配置文件
# 解压软件包
tar -zxvf kafka_2.13-3.2.1.tgz -C /usr/local/
# 编辑配置文件
vim /usr/local/kafka_2.13-3.2.1/config/server.properties
#--------------------------------配置文件-------------------------------------------
# broker的全局唯一编号,不能重复
broker.id=0
# 监听
listeners=PLAINTEXT://:9092 #开启此项
# 日志目录
log.dirs=/data/kafka/log #修改日志目录
# 配置zookeeper的连接(如果不是本机,需要该为ip或主机名)
zookeeper.connect=cong11:2181,cong12:2181,cong13:2181
#--------------------------------配置文件-------------------------------------------
# 创建日志目录
mkdir -p /data/kafka/log
环境变量
# 添加path环境变量
vim /etc/profile
export KAFKA_HOME=/usr/local/kafka_2.13-3.2.1
export PATH=$KAFKA_HOME/bin:$PATH
source /etc/profile
配置其他机器
# 拷贝kafka到其他机器
for i in 252 6;do scp -r /usr/local/kafka_2.13-3.2.1/ 192.168.137.$i:/usr/local/;done
# 拷贝profile
scp /etc/profile 192.168.137.252:/etc/profile
scp /etc/profile 192.168.137.6:/etc/profile
source /etc/profile
# 修改其他kafka的broker.id
[root@Book config]# sed -i 's/broker.id=0/broker.id=1/g' /usr/local/kafka_2.13-3.2.1/config/server.properties
[root@Client01 config]# sed -i 's/broker.id=0/broker.id=2/g' /usr/local/kafka_2.13-3.2.1/config/server.properties
# 创建日志目录
[root@Book ~]# mkdir -p /data/kafka/log
[root@Client01 ~]# mkdir -p /data/kafka/log
启动服务
# 后台启动服务
kafka-server-start.sh -daemon /usr/local/kafka_2.13-3.2.1/config/server.properties
# 查看服务进程
jps -m
4、集群测试
创建 Topic
kafka-topics.sh --create --bootstrap-server JClouds:9092 replication-factor 2 --partitions 4 --topic test
- --replication-factor:指定副本数量
- --partitions:指定分区数量
- --topic:主题名称
显示 Topic 配置
kafka-topics.sh --bootstrap-server JClouds:9092 --describe --topic test
- leader:负责处理消息的读和写,leader是从所有节点中随机选择的.
- replicas:列出了所有的副本节点,不管节点是否在服务中.
- isr:是正在服务中的节点
# 列出指定的topic
kafka-topics.sh --bootstrap-server JClouds:9092 --list --topic test
# 列出所有的topic
kafka-topics.sh --bootstrap-server JClouds:9092 --list
创建 Producer
在JClouds节点上测试产生者消息
[root@JClouds ~] kafka-console-producer.sh --broker-list JClouds:9092 --topic test
创建consumer
在Book节点上测试消费
kafka-console-consumer.sh --bootstrap-server JClouds:9092,Book:9092,Client01:9092 --topic test --from-beginning
删除Topic
kafka-topics.sh --delete --bootstrap-server JClouds:9092 --topic test
查看Zookeeper元数据
zkCli.sh