kafka新版本集群的安装与部署

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
相关推荐
中议视控10 小时前
展厅可视化网络中央控制系统:支持双向反馈,可视化播控,回显,状态显示,反向控制电脑,声光电网络视讯设备统一管理
网络·分布式·信息可视化
Java成神之路-1 天前
集群架构 vs 分布式微服务架构:核心区别通俗拆解
分布式·微服务·架构
运维行者_1 天前
企业带宽监控工具实战:网络流量分析与异常排查的5个关键能力
运维·服务器·开发语言·网络·分布式·后端·php
jeffwang1 天前
我把同一个压测做错了三次,第四次才发现真正的瓶颈
分布式·性能优化·rust
Blossom i1 天前
分布式编程实验二:Flink安装与编程实践(头歌云客)
大数据·分布式·flink
ai_coder_ai1 天前
事件驱动架构(EDA)在分布式业务系统中的应用
分布式·架构
蓝胖的四次元口袋2 天前
分布式知识梳理(4)
分布式
书香门第2 天前
系统设计练习 - 分布式黑名单服务(design a distributed denylist service)
分布式·系统架构·系统设计
江畔柳前堤2 天前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
霸道流氓气质2 天前
RabbitMQ 延迟队列与死信队列:原理、实现与实战
分布式·rabbitmq·ruby