CentOS7 下从零搭建 Kafka 单机环境(KRaft 模式实战指南)
CentOS7 下从零搭建 Kafka 单机环境(KRaft 模式实战指南)
Kafka 从2.8.0版本开始引入了KIP-500,开始支持在没有ZooKeeper的情况下运行,这种模式称为Kafka Raft Metadata (KRaft)模式。在3.9版本中,KRaft模式已经正式发布,可以用于生产环境。但是,传统的基于ZooKeeper的模式仍然被支持。
因此,对于Kafka 3.9,你有两种选择:
1. 继续使用传统的ZooKeeper模式(依赖ZooKeeper)
2. 使用新的KRaft模式(不依赖ZooKeeper)
KRaft模式的优势
- 简化架构:不需要单独部署和维护ZooKeeper集群
- 提高可扩展性:元数据管理不再受限于ZooKeeper的性能
- 提升稳定性:减少了一个故障点
- 更快的控制器故障转移
官方文档
https://kafka.apache.org/24/documentation.html
环境准备
系统要求
- 
CentOS 7 64 位系统 
- 
至少 2GB 内存(推荐 4GB+) 
- 
下载kafka安装包,安装包格式为tgz
下载地址
tar -zxvf kafka_2.12-3.9.1.tgz -C /usr/local/

创建软链接方便操作
ln -s /usr/local/kafka_2.12-3.9.1/ kafka-3.9.1
/url/local/kafka-3.9.1/
├── bin/          # 执行脚本(kafka-server-start.sh 等)
├── config/       # 配置文件(kraft/server.properties 等)
├── libs/         # 依赖库
└── logs/         # 日志目录
配置环境变量
# Kafka Environment export KAFKA_HOME=/usr/local/kafka-3.9.1 export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
配置KRaft模式
# 生成唯一集群 ID [root@vbox bin]# ./kafka-storage.sh random-uuid a9sqG57YRiW34orvtakVfg # 初始化元数据存储(替换 <集群ID> 为上一步生成的ID) [root@vbox kafka-3.9.1]# ./bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c ./config/kraft/server.properties Formatting metadata directory /tmp/kafka-logs/data/ with metadata.version 3.9-IV0. # 然后,格式化存储目录(这里使用默认配置的目录,你也可以自定义): bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
- 
- 
默认存储目录为 /tmp/kafka-logs
配置kafka服务
修改kRaft模式配置文件 config/kraft/server.properties (KRaft模式的配置文件)
# 设置节点ID(单机模式下为1) node.id=1 # 设置监听地址 listeners=PLAINTEXT://:9092 #advertised.listeners=PLAINTEXT://<服务器IP>:9092,CONTROLLER://<服务器IP>:9093 advertised.listeners=PLAINTEXT://192.168.110.17:9092,CONTROLLER://192.168.110.17:9093 # 设置日志目录(存储数据) log.dirs=/tmp/kafka-logs/data/ # 设置角色(同时作为broker和controller) process.roles=broker,controller # 设置controller的监听地址(本机) controller.listener.names=CONTROLLER controller.quorum.voters=1@<服务器IP>:9093 # 设置监听器列表,包括broker和controller的监听器 listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT inter.broker.listener.name=PLAINTEXT
注意:替换 <服务器IP> 为您的实际服务器 IP
# 启动命令、加上配置文件 #sh kafka-server-start.sh ../config/server.properties 编辑配置文件`config/kraft/server.properties`(KRaft模式的配置文件): # 后台服务运行命令 sh kafka-server-start.sh -daemon ../config/server.properties bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties # 后台启动 nohup /usr/local/kafka-3.9.1/bin/kafka-server-start.sh /usr/local/kafka-3.9.1/config/kraft/server.properties > /tmp/kafka-logs/logs/kafka.log 2>&1 & # 验证进程 ps -ef | grep kafka # 输出应包含 "kafka.Kafka config/kraft/server.properties"
验证
若启动成功,可通过以下命令查看 meta.properties 文件内容,确认元数据正确:
cat /tmp/kafka-logs/data/meta.properties
[root@vbox local]# cat /tmp/kafka-logs/data/meta.properties # #Mon Aug 04 16:58:56 CST 2025 node.id=1 directory.id=hBPcOTRj3vtuRnQuH7sHBg version=1 cluster.id=ctztqlnfQzCcZLn-JDEt3w [root@vbox local]#
验证kafka功能
cd /usr/local/kafka-3.9.1 # 创建名为 "test-topic" 的 Topic(1 分区,1 副本) bin/kafka-topics.sh --create --topic test-topic --partitions 1 --replication-factor 1 --bootstrap-server <你的服务器IP>:9092 bin/kafka-topics.sh --create --topic test-topic --partitions 1 --replication-factor 1 --bootstrap-server 192.168.110.17:9092 # 查看 Topic 列表 bin/kafka-topics.sh --list --bootstrap-server <你的服务器IP>:9092 # 输出: test-topic [root@vbox kafka-3.9.1]# ./bin/kafka-topics.sh --list --bootstrap-server 192.168.110.17:9092 test-topic a4part2repq ass5part commit-test learn.kafka long-words-output mytopic order-business-topic order-dw-topic order-monitor-topic qs4part2673 ser-topic springboottopic stream-input stream-long-words stream-word-count test test-lisa test-partition test-topic test_partition text-input [root@vbox kafka-3.9.1]#
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server <你的服务器IP>:9092 # 输入测试消息(如 "Hello Kafka 3.9!"),按 Ctrl+C 退出 ./bin/kafka-console-producer.sh --topic test-topic --bootstrap-server 192.168.110.17:9092 >"Hello Kafka 3.9!"
# 新开一个终端,启动消费者 bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server <你的服务器IP>:9092 # 应能收到生产者发送的消息 [root@vbox kafka-3.9.1]# ./bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server 192.168.110.17:9092 "Hello Kafka 3.9!"
停止kafka服务
cd/usr/local/kafka-3.9.1 bin/kafka-server-stop.sh
总结
- 
Kafka 3.9 不再强制依赖 ZooKeeper,推荐使用 KRaft 模式 
- 
KRaft 优势: - 
简化架构(无需外部协调服务) 
- 
更高性能 
- 
更快控制器故障转移 
- 
更简单的运维 
 
- 
- 
部署选择: - 
新集群:使用 KRaft 模式 
- 
已有 ZooKeeper 集群:可继续使用或迁移到 KRaft 
 
- 
- 
生产建议: - 
启用认证和加密 
- 
配置监控告警 
- 
定期备份元数据 
- 
测试故障转移能力 
 
- 
通过 KRaft 模式,Kafka 实现了从分布式协调系统到完全自包含系统的演进,大大简化了部署和运维复杂度,是未来 Kafka 架构的发展方向。
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号