Kafka集群环境搭建
前言
在搭建 kakfa 集群环境时,可以直接使用 kafka 源码包中 zookeeper 作为注册中心,也可以自行下载 zookeeper 源码包搭建一套单独的 zookeeper 集群。zookeeper 作为分布式注册中心,也建议作为公共服务单独搭建和部署。
源码包:
名称 | 版本 | 官网地址 |
---|---|---|
jdk | jdk-8u341-linux-x64.tar.gz | https://www.oracle.com/java/technologies/downloads/#java8 |
zookeeper | apache-zookeeper-3.8.0-bin.tar.gz | https://zookeeper.apache.org/releases.html |
kafka | kafka_2.13-3.2.1.tgz | https://kafka.apache.org/downloads |
将所需源码包下载好后,上传到每台主机中 /usr/local/src 目录,版本可以根据自己需要进行选择。
注:kafka_2.13-3.2.1.tgz 压缩包名中的 2.13 代表 Scala 版本号,3.2.1代表 kafka 版本号。
一、主机规划
主机名 | ip | 操作系统 |
---|---|---|
node1 | 10.0.0.21 | centos7.9 |
node2 | 10.0.0.22 | centos7.9 |
node3 | 10.0.0.23 | centos7.9 |
以下所有操作在每台主机上都执行,为避免过多重复内容只展示 10.0.0.21 一台主机的操作,在其他机器上执行时注意替换对应的编号。
修改主机名
hostnamectl set-hostname node1
修改host文件
cat >> /etc/hosts << EOF
10.0.0.21 node1
10.0.0.22 node2
10.0.0.23 node3
EOF
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
二、安装java
解压压缩包
cd /usr/local/src/
tar -zxvf jdk-8u341-linux-x64.tar.gz
mv jdk1.8.0_341 ../jdk
设置 java 环境变量
vim /etc/profile
在 /etc/profile 文件末尾写入如下内容:
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
更新环境变量
source /etc/profile
验证 java 是否安装成功
java -version
三、安装zookeeper
解压压缩包
cd /usr/local/src/
tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz
mv apache-zookeeper-3.8.0-bin ../zookeeper
创建数据目录
mkdir -p /data/zookeeper
创建 myid 文件
myid 文件中保存 zookeeper 节点的 id,每个节点保证不同,操作其他机器时注意修改,如:node2 则对应写入 “2”。
echo "1" >> /data/zookeeper/myid
修改 zookeeper 配置
cd /usr/local/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改后的配置文件如下:
# 最小单位时间,用于丈量心跳和超时时间,单位:ms
tickTime=2000
# follower 节点连接 leader 节点的 tick 数,以 tickTime 为单位判断是否超时
initLimit=10
# follower 节点同步 leader 节点的 tick 数,以 tickTime 为单位判断是否超时
syncLimit=5
# 数据目录
dataDir=/data/zookeeper
# 接受客户端请求端口
clientPort=2181
# 节点列表
# server.序号 对应 myid 中值
# 端口 2888 用于 follower 连接 leader
# 端口 3888 用于 leader 选举
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
启动 zookeeper
cd /usr/local/zookeeper
bin/zkServer.sh start
查看 zookeeper 状态
bin/zkServer.sh status
看到如下输出表示启动成功:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
Mode: leader 表示当前节点为 leader;
Mode: follower 表示当前节点为 follower;
注册 zookeeper 为 linux 系统服务
vim /etc/systemd/system/zookeeper.service
写入以下内容:
[Unit]
Description=zookeeper
After=network.target
[Service]
Type=forking
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/jdk/bin"
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
ExecReload=/usr/local/zookeeper/bin/zkServer.sh restart
Restart=on-failure
[Install]
WantedBy=multi-user.target
zookeeper 开机自启动
systemctl enable zookeeper
四、安装kafka
解压压缩包
cd /usr/local/src/
tar -zxvf kafka_2.13-3.2.1.tgz
mv kafka_2.13-3.2.1 ../kafka
创建数据目录
mkdir /data/kafka-logs
修改 kafka 配置
cd /usr/local/kafka/config
vim server.properties
需要修改的参数:
# 节点 id,整个集群中必须保证唯一,其他节点注意修改此值,如:node2 中 broker.id 改为 1
broker.id=0
# 数据目录,kafka 中日志即数据
log.dirs=/data/kafka-logs
# zookeeper 节点
zookeeper.connect=node1:2181,node2:2181,node3:2181
启动 kafka
bin/kafka-server-start.sh -daemon config/server.properties
验证 kafka 集群是否正常
# 创建主题
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --partitions 3 --replication-factor 3
# 查看主题详情
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic test
看到如下输出表示集群正常工作:
Topic: test TopicId: qOy41xkZQoGAzynPbgFuMg PartitionCount: 3 ReplicationFactor: 3 Configs: segment.bytes=1073741824,retention.bytes=10737418240
Topic: test Partition: 0 Leader: 1 Replicas: 1,0,2 Isr: 1,0,2
Topic: test Partition: 1 Leader: 0 Replicas: 0,2,1 Isr: 0,2,1
Topic: test Partition: 2 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0
注册 kafka 为 linux 系统服务
vim /etc/systemd/system/kafka.service
写入以下内容:
[Unit]
Description=kafka
After=network.target zookeeper.service
[Service]
Type=simple
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/jdk/bin"
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
kafka 开机自启动
systemctl enable kafka