Kafka集群搭建(需要有zookeeper集群搭建),我这里准备了三台服务器节点,每台上安装了zookeeper和kafka。zookeeper已经完成了集群搭建。
如果不会搭建zookeeper,请看这里如何搭建并使用zookeeper集群
一、下载安装包
下载地址:Apache Kafka
好了废话不多说,直接下载安装
1. 安装kafka:
- 下载对应版本,我这里使用3.1.0版本
-
如果找不着地方下,直接使用wget下载也可
1、选择所需版本下载[root@ywxtdb opt]# wget https://archive.apache.org/dist/kafka/2.1.0/kafka_2.12-2.1.0.tgz
2、解压安装包[root@ywxtdb opt]# tar -xvf kafka_2.12-2.1.0.tgz
- 下载后上传到Linux中,这里我使用的是xftp工具
- 解压,将tgz文件解压到/opt/module/kafka_2.12-3.0.0
# 解压压缩包
[root@node1-zookeeper /]# tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/
kafka_2.12-3.0.0/
kafka_2.12-3.0.0/LICENSE
kafka_2.12-3.0.0/NOTICE
kafka_2.12-3.0.0/bin/
kafka_2.12-3.0.0/bin/kafka-delete-records.sh
kafka_2.12-3.0.0/bin/trogdor.sh
...
- 查看kafka解压目录(进入/opt/module/kafka_2.12-3.0.0目录)
[root@node1-zookeeper kafka_2.12-3.0.0]# ll
总用量 64
drwxr-xr-x 3 root root 4096 9月 9 2021 bin
drwxr-xr-x 3 root root 4096 9月 9 2021 config
drwxr-xr-x 2 root root 8192 9月 27 18:37 libs
-rw-r--r-- 1 root root 14521 9月 9 2021 LICENSE
drwxr-xr-x 2 root root 262 9月 9 2021 licenses
-rw-r--r-- 1 root root 28184 9月 9 2021 NOTICE
drwxr-xr-x 2 root root 44 9月 9 2021 site-docs
2. 编辑配置文件server.properties
# 编辑配置文件
vim config/server.properties
# 1.代理ID,这里必须是一个唯一的整数值(第一台的节点为0,第二台为1,第三台为2)
broker.id=0
# 2.配置kafka实例监听的地址,如果不配置,可能会出现找不到IP,分区分配等待超时的问题:
advertised.listeners=PLAINTEXT://当前服务器的IP地址:9092
# 3.配置日志目录,kafuka存储数据(不能放在原来的默认目录下,为了方便管理使用,一般放在kafka的解压目录下)
log.dirs=/opt/module/kafka_2.12-3.0.0/datas
# 4.配置连接的zookeeper的主机名或IP地址加上端口号。
# /kafka:指定zookeeper中kafka的根节点,节点名称自由定义,用来统一存放kafka相关信息,如果不配置,kafuka的信息在zookeeper中就会自由打散到zookeeper中各个节点,不利于后续管理
zookeeper.connect=node01_zookeeper:2181,node2-zookeeper:2181,node3-zookeeper:2181/kafka
# 如果没有配置IP映射名称,就直接使用每个服务器节点的IP
zookeeper.connect=192.168.xxx.xxx:2181,192.168.xxx.xxx:2181,192.168.xxx.xxx:2181/kafka
- 以上配置完成之后,使用xsync将kafka_2.12-3.0.0目录分发到剩余的两个节点
[root@node1-zookeeper module]# xsync kafka_2.12-3.0.0/
==================== node1-zookeeper ====================
root@node1-zookeeper's password:
root@node1-zookeeper's password:
sending incremental file list
sent 5,868 bytes received 24 bytes 1,309.33 bytes/sec
total size is 90,160,028 speedup is 15,302.11
==================== node2-zookeeper ====================
sending incremental file list
kafka_2.12-3.0.0/config/
kafka_2.12-3.0.0/config/server.properties
kafka_2.12-3.0.0/libs/
sent 8,498 bytes received 113 bytes 5,740.67 bytes/sec
total size is 90,160,028 speedup is 10,470.33
==================== node3-zookeeper ====================
sending incremental file list
kafka_2.12-3.0.0/config/
kafka_2.12-3.0.0/config/server.properties
kafka_2.12-3.0.0/libs/
- 分发过去之后记得将server.properties文件中的broker.id改掉,第一台中的broker.id为0,第二台为1,第三台为2,注意不要有空格
- 如果你没有配置xsync脚本,那么直接将/opt/module/kafka_2.12-3.0.0/config/server.properties文件复制到另外两台节点(你可以使用各种文件传输工具,如 scp、rsync 或 sftp,或者使用xftp连接上手动粘贴过去都可以),或者你可以看一下如何使用rsync
- 如果以上都不会,那就按照上述步骤将剩余两台节点中的kafka配置文件再配置一遍(记得该broker.id)
# 比如使用scp命令 scp [要复制的文件目录] [用户名]@[远程IP]:[目标文件目录]
3.配置kafka环境变量
[root@node1-zookeeper module]# vim /etc/profile # 在profile文件最末尾添加一下配置(这里的目录根据自己的实际kafka解压安装来) export KAFKA_HOME=/opt/module/kafka_2.12-3.0.0 export PATH=$PATH:$KAFKA_HOME/bin
- 刷新配置文件
[root@node1-zookeeper module]# source /etc/profile
[root@node1-zookeeper module]#
4.启动kafka
- 正常我们启动kafka直接启动脚本即可,但是我们修改该过配置文件,所以启动是会报错
[root@node1-zookeeper kafka_2.12-3.0.0]# bin/kafka-server-start.sh
USAGE: bin/kafka-server-start.sh [-daemon] server.properties [--override property=value]*
- 所以要进入kafka目录内,执行以下命令来启动kafka服务器(带着配置文件启动),相当于对默认的配置进行一个覆盖,三台都要启动
# 指定配置文件启动kafka
[root@node1-zookeeper kafka_2.12-3.0.0]# bin/kafka-server-start.sh -daemon config/server.properties
# 查看进程
[root@node1-zookeeper kafka_2.12-3.0.0]# jps
6419 Kafka
6438 Jps
1644 QuorumPeerMain
- 注意在启动之前一定要把9092端口开放!!!
# 查看防火墙状态
sudo firewall-cmd --state
# 查看所有开放端口
sudo firewall-cmd --list-ports
# 开放指定端口
sudo firewall-cmd --add-port=端口号/协议
# 例如
sudo firewall-cmd --add-port=9092/tcp
# 永久开放端口
sudo firewall-cmd --add-port=端口号/协议 --permanent
# 移除开放端口
sudo firewall-cmd --remove-prot=端口号/协议
# 永久移除
sudo firewall-cmd --remove-port=端口号/协议 --permanent
5. 编写kafka启停脚本(在生产环境中不可能手动一台一台启动,所以我们编写一个简单的启停止脚本)
# 1.进入/usr/local/bin目录
[root@node1-zookeeper kafka_2.12-3.0.0]# cd /usr/local/bin/
# 2.创建并编辑kafka.sh文件
[root@node1-zookeeper bin]# vim kafka.sh
- 在kafka.sh文件中添加如下内容
#!/bin/bash
case $1 in
"start")
for i in node1-zookeeper node2-zookeeper node3-zookeeper
do
echo "---------------------- start $i kafka ---------------------"
ssh $i /opt/module/kafka_2.12-3.0.0/bin/kafka-server-start.sh -daemon /opt/module/kafka_2.12-3.0.0/config/server.properties
done
;;
"stop")
for i in node1-zookeeper node2-zookeeper node3-zookeeper
do
echo "---------------------- stop $i kafka ---------------------"
ssh $i /opt/module/kafka_2.12-3.0.0/bin/kafka-server-stop.sh
done
;;
esac
- 退出并保存之后,给文件添加可执行权限
[root@node1-zookeeper bin]# chmod 777 kafka.sh
- 查看并测试,注意执行脚本的时候可能需要输入用户密码,直接输入自己的用户密码即可, 至于免密登录方式自行百度,这里不在赘述,启动kafka之前请确保自己的zookeeper集群启动并运行正常!
[root@node1-zookeeper bin]# ll
总用量 12
-rwxrwxrwx 1 root root 552 9月 28 00:09 kafka.sh
# 测试停止kafka
[root@node1-zookeeper /]# kafka.sh stop
----------------------stop node1-zookeeper kafka---------------------
----------------------stop node2-zookeeper kafka---------------------
----------------------stop node3-zookeeper kafka---------------------
# 在节点1上查看
[root@node1-zookeeper bin]# jps
6603 Jps
1644 QuorumPeerMain
# 测试启动kafka
[root@node1-zookeeper bin]# kafka.sh start
----------------------start node1-zookeeper kafka---------------------
----------------------start node2-zookeeper kafka---------------------
----------------------start node3-zookeeper kafka---------------------
# 在节点1上查看
[root@node1-zookeeper bin]# jps
6966 Jps
1644 QuorumPeerMain
6941 Kafka
- 注意一些小问题:
- 在停止kafka的时候立即查看kafka状态并不会消失,因为kafka停止需要一些时间,所以可以稍微等待一会儿再去查看。
- 在集群中必须先关闭kafka,等待kafka关闭结束后才能继续关闭zookeeper,如果还有kafka没有关掉,就将zookeeper停止,那么此时kafka进程将永远无法关闭,只能使用kill将其进程杀掉,因为在zookeeper存储着kafka的信息,在kafka停止前,会先跟zookeeper通信查看kafka状态,但是此时zookeeper已经关闭,无法获取状态,所以就无法关闭。
示例:查看一下zookeeper中保存的kafka信息
至此,kafka集群搭建结束,下一章将介绍kafka的相关操作和Java API的使用等等