记录:456
场景:在CentOS 7.9操作系统上,使用kafka_2.12-2.8.0版本,在三台机器上,安装Kafka集群。使用Zookeeper集群作为Kafka集群的节点注册与协同管理。
版本:kafka_2.12-2.8.0,zookeeper-3.5.9,CentOS 7.9,Linux kernel-5.4.218。
Zookeeper集群安装:在Linux上安装Zookeeper集群(zookeeper-3.5.9)
1.主机规划
(1)Zookeeper集群规划
目标:使用三台主机部署Zookeeper集群。
主机app161;IP:192.168.19.161;端口:22181,28001,28501。
主机app162;IP:192.168.19.162;端口:22181,28001,28501。
主机app163;IP:192.168.19.163;端口:22181,28001,28501。
(2)Kafka集群规划
目标:使用三台主机部署Kafka集群。
主机app161;IP:192.168.19.161;端口:29092。
主机app162;IP:192.168.19.162;端口:29092。
主机app163;IP:192.168.19.163;端口:29092。
2.下载kafka_2.12-2.8.0安装包
下载版本:kafka_2.12-2.8.0.tgz
下载地址:https://archive.apache.org/dist/kafka
下载命令:wget https://archive.apache.org/dist/kafka/2.8.0/kafka_2.12-2.8.0.tgz
解析:下载完成后,kafka_2.12-2.8.0.tgz包在当前目录。
3.解压kafka包到指定目录
命令:tar -zxvf /home/apps/software/kafka_2.12-2.8.0.tgz -C /home/opt/kfk
解析:解压到指定目录:/home/opt/kfk/kafka_2.12-2.8.0/。
4.创建kafka的日志目录
kafka数据和日志目录放在指定目录。
命令:mkdir -p /home/opt/kfk/kafka-logs-2.8.0
解析:日志和数据存放在此目录。
5.修改kafka配置
5.1修改server.properties
配置文件:/home/opt/kfk/kafka_2.12-2.8.0/config/server.properties
修改命令:vi server.properties
修改内容:
#kafka集群唯一标识
broker.id=0
#kafka集群的地址
broker.list=192.168.19.161:29092,192.168.19.162:29092,192.168.19.163:29092
#绑定主机IP
host.name=192.168.19.161
#本机监听端口
port=29092
#分区数量
num.partitions=3
#队列中消息持久化和日志等存放的位置
log.dirs=/home/opt/kfk/kafka-logs-2.8.0
#zookeeper集群
zookeeper.connect=192.168.19.161:22181,192.168.19.162:22181,192.168.19.163:22181
5.2修改server.properties的broker.id和host.name
在集群中server.properties的broker.id和host.name不同,其它内容相同。
(1)在app161主机的server.properties的broker.id和host.name
broker.id=0
host.name=192.168.19.161
(2)在app162主机的server.properties的broker.id和host.name
broker.id=1
host.name=192.168.19.162
(3)在app163主机的server.properties的broker.id和host.name
broker.id=2
host.name=192.168.19.163
6.把主机app161配置的kafka拷贝到其它主机
6.1远程创建目录
脚本名称:mkdir_kfk.sh
脚本内容:
#!/bin/bash
for host_name in app162 app163
do
ssh -t root@${host_name} 'mkdir -p /home/opt/kfk/kafka_2.12-2.8.0 ;\
mkdir -p /home/opt/kfk/kafka-logs-2.8.0'
done
执行脚本:bash mkdir_kfk.sh
6.2远程拷贝kafka到其它主机
脚本名称:scp_kfk.sh
脚本内容:
#!/bin/bash
for host_name in app162 app163
do
scp -r /home/opt/kfk/kafka_2.12-2.8.0/* root@${host_name}:/home/opt/kfk/kafka_2.12-2.8.0
scp -r /home/opt/kfk/kafka-logs-2.8.0/* root@${host_name}:/home/opt/kfk/kafka-logs-2.8.0
done
执行脚本:bash scp_kfk.sh
7.修改主机app162和app163的server.properties
主要修改server.properties的broker.id和host.name。
(1)在app162主机的server.properties的broker.id和host.name
broker.id=1
host.name=192.168.19.162
(2)在app163主机的server.properties的broker.id和host.name
broker.id=2
host.name=192.168.19.163
8.启动zookeeper集群
操作用户切换为learn用户:su learn
启动zookeeper集群,只需启动每个节点,zookeeper会自动组成集群。
使用用户:su learn
操作目录:/home/opt/zk/zookeeper-3.5.9/bin
启动命令:sh zkServer.sh start
9.修改kafka目录所有权
在此步骤前,zookeeper相关操作使用root用户操作。生产环境一般运行zookeeper使用普通用户,修改目录所有权。
脚本名称:chown_kfk.sh
脚本内容:
#!/bin/bash
for host_name in app161 app162 app163
do
ssh -t root@${host_name} 'chown -R learn:learn /home/opt/kfk/'
done
执行脚本:bash chown_kfk.sh
解析:把/home/opt/kfk/目录所有权赋给learn用户.
10.启动kafka集群
10.1启动kafka集群(逐台启动)
使用启动名到每台主机启动zookeeper就行。
使用用户:su learn
操作目录:/home/opt/kfk/kafka_2.12-2.8.0
启动命令: ./bin/kafka-server-start.sh ./config/server.properties
启动命令:nohup /home/opt/kfk/kafka_2.12-2.8.0/bin/kafka-server-start.sh /home/opt/kfk/kafka_2.12-2.8.0/config/server.properties &
11.登录zookeeper集群查看broker信息
在zookeeper集群查看kafka注册的broker。
操作目录:/home/opt/zk/zookeeper-3.5.9/bin
(1)登录命令
sh zkCli.sh -timeout 5000 -server 192.168.19.161:22181
sh zkCli.sh -timeout 5000 -server 192.168.19.162:22181
sh zkCli.sh -timeout 5000 -server 192.168.19.163:22181
(2)在zookeeper客户端执行命令
查看broker:ls /brokers
查看ids:ls /brokers/ids
查看seqid:ls /brokers/seqid
查看topics:ls /brokers/topics
日志信息:
[zk: 192.168.19.161:22181(CONNECTED) 0] ls /brokers
[ids, seqid, topics]
[zk: 192.168.19.161:22181(CONNECTED) 1] ls /brokers/ids
[0, 1, 2]
[zk: 192.168.19.161:22181(CONNECTED) 2] ls /brokers/seqid
[]
[zk: 192.168.19.161:22181(CONNECTED) 3] ls /brokers/topics
[]
12.kafka基本应用
操作目录:/home/opt/kfk/kafka_2.12-2.8.0/bin
12.1创建topics
命令:sh kafka-topics.sh --create --zookeeper 192.168.19.161:22181 --replication-factor 1 --partitions 1 --topic d-20230611-city-info
日志信息:
[learn@app161 bin]$ sh kafka-topics.sh --create --zookeeper 192.168.19.161:22181 --replication-factor 1 --partitions 1 --topic d-20230611-city-info
Created topic d-20230611-city-info.
12.2启动kafka生产者
命令:sh kafka-console-producer.sh --broker-list 192.168.19.162:29092 --topic d-20230611-city-info
解析:创建生产者后,topic中写入消息。
控制台信息:
[learn@app162 bin]$ sh kafka-console-producer.sh --broker-list 192.168.19.162:29092 --topic d-20230611-city-info
>Hangzhou
>
12.3启动kafka消费者
命令:sh kafka-console-consumer.sh --bootstrap-server 192.168.19.163:29092 --topic d-20230611-city-info
解析:创建消费者后,会从topic读出消息。
控制台信息:
[learn@app163 bin]$ sh kafka-console-consumer.sh --bootstrap-server 192.168.19.163:29092 --topic d-20230611-city-info
Hangzhou
12.4使用kafka-topics.sh查看topics
命令:sh kafka-topics.sh --zookeeper 192.168.19.161:22181 --describe --topic d-20230611-city-info
控制台信息:
[learn@app161 bin]$ sh kafka-topics.sh --zookeeper 192.168.19.161:22181 --describe --topic d-20230611-city-info
Topic: d-20230611-city-info TopicId: bkDheCsnTv2gGOev1feCQw PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: d-20230611-city-info Partition: 0 Leader: 0 Replicas: 0 Isr: 0
12.5使用zookeeper查看topics
连接命令:sh zkCli.sh -timeout 5000 -server 192.168.19.161:22181
查看命令:ls /brokers/topics
控制台信息:
[zk: 192.168.19.161:22181(CONNECTED) 4] ls /brokers/topics
[__consumer_offsets, d-20230611-city-info]
以上,感谢。
2023年6月11日