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
相关推荐
SLD_Allen2 小时前
大规模分布式AI训练基础设施
人工智能·分布式·模型训练
abcy0712132 小时前
kafka消息丢失与消息重复消费
kafka
富士康质检员张全蛋3 小时前
Kafka的操作-消费的详情
分布式·kafka
昕光xg4 小时前
Istio笔记04-基于Jaeger的分布式链路追踪
笔记·分布式·istio
wWYy.18 小时前
分布式:数据复制
分布式
正儿八经的少年1 天前
分布式 ID
分布式
七夜zippoe1 天前
深入解析CANN仓库中的HCCL分布式通信库
pytorch·分布式·cann·hccl·通信库
AI人工智能+电脑小能手1 天前
【大白话说Java面试题 第188题】【08_Kafka篇】第4题:Kafka 大量消息积压时该如何处理?
java·性能优化·kafka·故障排查·消息积压
富士康质检员张全蛋1 天前
Kafka的操作 消费者组 消费位置查看
分布式·kafka