kafka新版本集群的安装与部署
新的版本不用zooKeeper依赖,使用KRaft模式。
1、创建目录
#安装目录
mkdir -p /data/kafka
#Broker数据目录
mkdir -p /data/kafka_data
#元数据日志目录(与数据目录平级)
mkdir -p /data/kafka_metadata
#JDK目录
mkdir -p /data/jdk
2、安装JAVA环境
#将 bisheng-jdk-17.0.15-b13-linux-aarch64.tar.gz 上传到 /data/jdk 目录
#然后解压
tar -xzf bisheng-jdk-17.0.15-b13-linux-aarch64.tar.gz
#设置环境变量
sudo tee /etc/profile.d/jdk.sh > /dev/null << 'EOF'
export JAVA_HOME=/data/jdk/bisheng-jdk-17.0.15
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EOF
#使环境变量生效
source /etc/profile.d/jdk.sh
#验证JDK
/data/jdk/bisheng-jdk-17.0.15/bin/java -version
预期输出类似:
openjdk version "17.0.15" 2025-04-15
OpenJDK Runtime Environment BiSheng (build 17.0.15+13)
OpenJDK 64-Bit Server VM BiSheng (build 17.0.15+13, mixed mode, sharing)
3、配置防火墙端口
在 3台节点上分别执行:
#开放端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent
firewall-cmd --zone=public --add-port=9093/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
4、上传kafka安装包
#将 kafka_2.13-3.9.1.tgz 上传到 /data/kafka 目录
#然后解压
tar -xzf kafka_2.13-3.9.1.tgz
#验证版本
/data/kafka/kafka_2.13-3.9.1/bin/kafka-topics.sh --version
5、编辑kafka配置文件
#生成集群唯一ID(Cluster ID)
仅在 192.168.5.4 上执行一次:
/data/kafka/kafka_2.13-3.9.1/bin/kafka-storage.sh random-uuid
输出示例:KBd1TPd7TtqbDENqeLT0bw
请复制保存此ID,三台节点将使用同一个ID。
#配置KRaft模式(使用IP地址)
#配置 kafka1 (192.168.5.4)
vi /data/kafka/kafka_2.13-3.9.1/config/kraft/server.properties
节点1完整配置内容(使用IP地址):
# ============ 集群配置 ============
# 集群唯一ID(必填)
cluster.id=KBd1TPd7TtqbDENqeLT0bw
# 节点角色(broker + controller)
process.roles=broker,controller
node.id=1
# Controller投票者列表
controller.quorum.voters=1@192.168.5.4:9093,2@192.168.5.5:9093,3@192.168.5.6:9093
# Controller监听器名称(重要!必须配置)
controller.listener.names=CONTROLLER
# ============ 监听配置 ============
# 绑定到所有网卡
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
# 对外通告地址(使用IP)
advertised.listeners=PLAINTEXT://192.168.5.4:9092
# 协议映射
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
# ============ 存储配置 ============
log.dirs=/data/kafka_data
metadata.log.dir=/data/kafka_metadata
# ============ 网络线程配置 ============
num.network.threads=8
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
# ============ 日志留存策略 ============
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
# ============ Topic默认配置 ============
num.partitions=3
default.replication.factor=3
min.insync.replicas=2
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=2
# ============ 其他配置 ============
connections.max.idle.ms=600000
auto.create.topics.enable=true
log.cleanup.policy=delete
log.cleaner.enable=true
节点2完整配置内容(使用IP地址):
# ============ 集群配置 ============
cluster.id=KBd1TPd7TtqbDENqeLT0bw
process.roles=broker,controller
node.id=2
controller.quorum.voters=1@192.168.5.4:9093,2@192.168.5.5:9093,3@192.168.5.6:9093
# Controller监听器名称(重要!必须配置)
controller.listener.names=CONTROLLER
# ============ 监听配置 ============
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
advertised.listeners=PLAINTEXT://192.168.5.5:9092
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
# ============ 存储配置 ============
log.dirs=/data/kafka_data
metadata.log.dir=/data/kafka_metadata
# ============ 网络线程配置 ============
num.network.threads=8
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
# ============ 日志留存策略 ============
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
# ============ Topic默认配置 ============
num.partitions=3
default.replication.factor=3
min.insync.replicas=2
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=2
# ============ 其他配置 ============
connections.max.idle.ms=600000
auto.create.topics.enable=true
log.cleanup.policy=delete
log.cleaner.enable=true
节点3完整配置内容(使用IP地址):
# ============ 集群配置 ============
cluster.id=KBd1TPd7TtqbDENqeLT0bw
process.roles=broker,controller
node.id=3
controller.quorum.voters=1@192.168.5.4:9093,2@192.168.5.5:9093,3@192.168.5.6:9093
# Controller监听器名称(重要!必须配置)
controller.listener.names=CONTROLLER
# ============ 监听配置 ============
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
advertised.listeners=PLAINTEXT://192.168.5.6:9092
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
# ============ 存储配置 ============
log.dirs=/data/kafka_data
metadata.log.dir=/data/kafka_metadata
# ============ 网络线程配置 ============
num.network.threads=8
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
# ============ 日志留存策略 ============
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
# ============ Topic默认配置 ============
num.partitions=3
default.replication.factor=3
min.insync.replicas=2
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=2
# ============ 其他配置 ============
connections.max.idle.ms=600000
auto.create.topics.enable=true
log.cleanup.policy=delete
log.cleaner.enable=true
6、格式化存储目录
在3台节点上分别执行(使用集群ID KBd1TPd7TtqbDENqeLT0bw):
/data/kafka/kafka_2.13-3.9.1/bin/kafka-storage.sh format -t KBd1TPd7TtqbDENqeLT0bw -c /data/kafka/kafka_2.13-3.9.1/config/kraft/server.properties
如果提示目录非空,先清空:
rm -rf /data/kafka_data/metadata/*
#然后重新执行格式化命令
7、启动Kafka集群
#按顺序启动
先在 192.168.5.4 上启动:
/data/kafka/kafka_2.13-3.9.1/bin/kafka-server-start.sh -daemon /data/kafka/kafka_2.13-3.9.1/config/kraft/server.properties
#查看启动日志
tail -f /data/kafka/kafka_2.13-3.9.1/logs/kafkaServer.out
等待5-10秒,在 192.168.5.5 上启动:
/data/kafka/kafka_2.13-3.9.1/bin/kafka-server-start.sh -daemon /data/kafka/kafka_2.13-3.9.1/config/kraft/server.properties
再等待5-10秒,在 192.168.5.6 上启动:
/data/kafka/kafka_2.13-3.9.1/bin/kafka-server-start.sh -daemon /data/kafka/kafka_2.13-3.9.1/config/kraft/server.properties
#查看Kafka进程
ps -ef | grep kafka | grep -v grep
#查看端口监听
netstat -tlnp | grep -E "9092|9093"
#验证集群
#查看Controller状态
/data/kafka/kafka_2.13-3.9.1/bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.5.4:9092 describe --status
#查看所有Broker
/data/kafka/kafka_2.13-3.9.1/bin/kafka-broker-api-versions.sh --bootstrap-server 192.168.5.4:9092
#创建测试Topic
/data/kafka/kafka_2.13-3.9.1/bin/kafka-topics.sh --bootstrap-server 192.168.5.4:9092 \
--create --topic test \
--partitions 3 \
--replication-factor 3
#查看Topic详情
/data/kafka/kafka_2.13-3.9.1/bin/kafka-topics.sh --bootstrap-server 192.168.5.4:9092 --describe --topic test
#预期输出:
Topic: test TopicId: xxx PartitionCount: 3 ReplicationFactor: 3
Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1
Partition: 2 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
#生产消费测试
#生产消息
echo "Hello Kafka Cluster" | /data/kafka/kafka_2.13-3.9.1/bin/kafka-console-producer.sh \
--bootstrap-server 192.168.5.4:9092 \
--topic test
#消费消息
/data/kafka/kafka_2.13-3.9.1/bin/kafka-console-consumer.sh \
--bootstrap-server 192.168.5.4:9092 \
--topic test \
--from-beginning
8、配置systemd服务
在 3台节点上分别创建:
cat > /etc/systemd/system/kafka.service << 'EOF'
[Unit]
Description=Apache Kafka Server
After=network.target
[Service]
Type=simple
User=root
Environment="JAVA_HOME=/data/jdk/bisheng-jdk-17.0.15"
Environment="PATH=/data/jdk/bisheng-jdk-17.0.15/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/data/kafka/kafka_2.13-3.9.1/bin/kafka-server-start.sh /data/kafka/kafka_2.13-3.9.1/config/kraft/server.properties
ExecStop=/data/kafka/kafka_2.13-3.9.1/bin/kafka-server-stop.sh
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
#先停止前面启动的kafka服务再执行
systemctl daemon-reload
systemctl enable kafka
systemctl start kafka
systemctl stop kafka
systemctl status kafka
9、常用管理命令
#=== systemd管理 ===
systemctl start kafka
systemctl stop kafka
systemctl restart kafka
systemctl status kafka
#=== 脚本管理 ===
/data/kafka/kafka_2.13-3.9.1/bin/kafka-server-start.sh -daemon /data/kafka/kafka_2.13-3.9.1/config/kraft/server.properties
/data/kafka/kafka_2.13-3.9.1/bin/kafka-server-stop.sh
#=== 查看日志 ===
tail -f /data/kafka/kafka_2.13-3.9.1/logs/kafkaServer.out
tail -100 /data/kafka/kafka_2.13-3.9.1/logs/kafkaServer.out
#=== Topic管理 ===
/data/kafka/kafka_2.13-3.9.1/bin/kafka-topics.sh --bootstrap-server 192.168.5.4:9092 --list
/data/kafka/kafka_2.13-3.9.1/bin/kafka-topics.sh --bootstrap-server 192.168.5.4:9092 --describe --topic test
/data/kafka/kafka_2.13-3.9.1/bin/kafka-topics.sh --bootstrap-server 192.168.5.4:9092 --delete --topic test