欢迎来到窥视未来的博客

https://github.com/lwx57280 https://gitee.com/li_VillageHead

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的性能

- 提升稳定性:减少了一个故障点

- 更快的控制器故障转移

 

官方文档

http://kafka.apache.org/quickstart

https://kafka.apache.org/24/documentation.html

kafka-doc-zh

环境准备

系统要求

  • CentOS 7 64 位系统

  • 至少 2GB 内存(推荐 4GB+)

  • 关闭防火墙或开放必要端口(9092、9093)

  • jdk-17

下载kafka安装包,安装包格式为tgz

下载地址

http://archive.apache.org/dist/kafka/

apache/kafka:Apache Kafka 的镜像

 

下载并解压kafka tgz包

tar -zxvf kafka_2.12-3.9.1.tgz -C /usr/local/

 

解压结果如下:

141829_522

 

创建软链接方便操作

ln -s /usr/local/kafka_2.12-3.9.1/ kafka-3.9.1

 

kafka目录结构

/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
  • 成功提示:Formatting /tmp/kafka-logs/data/ with metadata.version 3.9-IV1.

  • 默认存储目录为 /tmp/kafka-logs(可在配置文件中修改)

配置kafka服务

修改kRaft模式配置文件 config/kraft/server.properties (KRaft模式的配置文件)

server.properties 关键配置

# 设置节点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

启动kafak服务

# 启动命令、加上配置文件
#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

 

总结

  1. Kafka 3.9 不再强制依赖 ZooKeeper,推荐使用 KRaft 模式

  2. KRaft 优势:

    • 简化架构(无需外部协调服务)

    • 更高性能

    • 更快控制器故障转移

    • 更简单的运维

  3. 部署选择:

    • 新集群:使用 KRaft 模式

    • 已有 ZooKeeper 集群:可继续使用或迁移到 KRaft

  4. 生产建议:

    • 启用认证和加密

    • 配置监控告警

    • 定期备份元数据

    • 测试故障转移能力

通过 KRaft 模式,Kafka 实现了从分布式协调系统到完全自包含系统的演进,大大简化了部署和运维复杂度,是未来 Kafka 架构的发展方向。

posted on 2025-08-11 19:25  窥视未来  阅读(133)  评论(0)    收藏  举报

导航