kafka4.x单机版安装部署(单节点 KRaft 模式)

一、下载安装包,配置jdk17+环境

1.1 存储位置建议

既然只有根分区,建议把 Kafka 安装到 /opt/kafka 或 /home/your_user/kafka 下,数据目录也放在同一分区:

bash

1.2 推荐安装在 /opt 下(符合 FHS 标准)

cd /opt

sudo wget https://downloads.apache.org/kafka/4.1.2/kafka_2.13-4.1.2.tgz

tar -xzf kafka_2.13-4.1.2.tgz

mv kafka_2.13-4.1.2 kafka

1.3. 配置数据目录

在 config/kraft/server.properties 中指定数据存储位置:

properties

log.dirs=/opt/kafka/data

创建该目录:

bash

mkdir -p /opt/kafka/data

1.4 ⚙️ 配置优化建议(针对你的 30G 内存)

编辑 config/kraft/server.properties,根据你的硬件做些调优:

properties 复制代码
# 充分利用内存,提升性能
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=72
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000

# 如果需要从外部访问,修改 advertised.listeners
# advertised.listeners=PLAINTEXT://<你的公网IP>:9092

二、解压安装包,创建kafka用户,并免登录授权,修改配置文件

2.1 创建专用的运行用户(推荐):

为了安全,建议不要使用 root 用户运行 Kafka。

bash 复制代码
sudo useradd -r -s /sbin/nologin kafka
sudo chown -R kafka:kafka /opt/kafka

创建用户目录

bash 复制代码
sudo mkdir -p /home/kafka
sudo chown kafka:kafka /home/kafka
sudo chmod 755 /home/kafka

注意:JAVA_HOME 应该是目录,不是 bin/java

bash 复制代码
sudo -u kafka bash -c 'echo "export JAVA_HOME=/usr/local/java/jdk-21.0.12" >> /home/kafka/.bashrc'
sudo -u kafka bash -c 'echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /home/kafka/.bashrc'
sudo -u kafka bash -c 'echo "export KAFKA_HEAP_OPTS=\"-Xmx4G -Xms4G\"" >> /home/kafka/.bashrc'
bash 复制代码
验证 kafka 用户能否正常使用 Java
 
# 使用 -i 参数模拟登录 shell,加载 .bashrc
sudo -u kafka java -version

2.2 第二步:核心配置(KRaft 模式)

Kafka 4.1.2 使用 KRaft 模式,不再需要 ZooKeeper 配置文件。主要的配置文件是 /opt/kafka/config/server.properties。建议先备份原文件,再修改。

bash 复制代码
 
sudo -u kafka cp /opt/kafka/config/server.properties /opt/kafka/config/server.properties.bak
sudo -u kafka vi /opt/kafka/config/server.properties
bash 复制代码
# 节点标识,单节点设为1
node.id=1

# 进程角色,单节点同时承担 broker 和 controller 角色
process.roles=broker,controller

# Controller 节点列表,格式:nodeId@host:port
controller.quorum.voters=1@localhost:9093

# 监听器配置
# PLAINTEXT://:9092 是客户端连接端口
# CONTROLLER://:9093 是Controller内部通信端口
listeners=PLAINTEXT://:9092,CONTROLLER://:9093

# 对外公布的地址,客户端通过此地址连接
# 如果您需要从其他机器访问,请将 localhost 替换为您的云服务器公网IP
advertised.listeners=PLAINTEXT://localhost:9092

# 监听器协议映射
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
controller.listener.names=CONTROLLER
inter.broker.listener.name=PLAINTEXT

# 数据存储目录
log.dirs=/opt/kafka/data

# 针对您30G内存的JVM调优建议
# 在启动脚本 /opt/kafka/bin/kafka-server-start.sh 中设置
# export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G"

以下是针对您服务器环境(单节点,30G内存)的关键配置项,其中 node.id 和 controller.quorum.voters 等 KRaft 特有配置需正确设置。

三、kafka安装启动测试,并添加系统服务

3.1. 生成集群 UUID

bash 复制代码
export KAFKA_CLUSTER_ID="$(sudo -u kafka bash -c 'export JAVA_HOME=/usr/local/java/jdk-21.0.12; export PATH=$JAVA_HOME/bin:$PATH; /opt/kafka/bin/kafka-storage.sh random-uuid')"
echo "生成的 Cluster ID: $KAFKA_CLUSTER_ID"

3.2. 格式化存储目录(用上面生成的 UUID)

bash 复制代码
sudo -u kafka bash -c "
export JAVA_HOME=/usr/local/java/jdk-21.0.12
export PATH=\$JAVA_HOME/bin:\$PATH
/opt/kafka/bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c /opt/kafka/config/server.properties
"

3.3. 启动 Kafka

bash 复制代码
sudo -u kafka bash -c '
export JAVA_HOME=/usr/local/java/jdk-21.0.12
export PATH=$JAVA_HOME/bin:$PATH
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
'

3.4⚙️ 配置 systemd 服务(开机自启)

现在 Kafka 正在前台运行(或已后台运行)。建议配置 systemd 服务,确保重启后自动启动:

bash

3.4.1. 创建 service 文件

bash 复制代码
sudo tee /etc/systemd/system/kafka.service > /dev/null << 'EOF'
[Unit]
Description=Apache Kafka Server (KRaft mode)
Documentation=http://kafka.apache.org
Requires=network.target
After=network.target

[Service]
Type=simple
User=kafka
Group=kafka
Environment="JAVA_HOME=/usr/local/java/jdk-21.0.12"
Environment="PATH=/usr/local/java/jdk-21.0.12/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="KAFKA_HEAP_OPTS=-Xmx4G -Xms4G"
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

3.4.2. 启用并启动服务

sudo systemctl daemon-reload

sudo systemctl enable kafka

sudo systemctl start kafka

sudo systemctl status kafka

4. kafka 局域网络测试连接

kafka配置文件修改

properties 复制代码
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://x.1x.1x.215:9092
如果配置不对,修改后重启 Kafka:

kafka 服务重启

bash 复制代码
sudo -u kafka bash -c '
export JAVA_HOME=/usr/local/java/jdk-21.0.12
export PATH=$JAVA_HOME/bin:$PATH
/opt/kafka/bin/kafka-server-stop.sh
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
'
相关推荐
智码看视界5 小时前
技术选型指南:Pulsar vs Kafka:消息队列选型终极对比与压测
kafka·消息队列·pulsar·消息中间件·流处理·高吞吐·架构选型
俊哥大数据6 小时前
Flink1.20.3 实时消费 Kafka 数据并解析入湖 Paimon1.4.2 全流程实战
分布式·flink·kafka·数据湖·paimon
今年下半年1 天前
记录一次IBMS物联网项目的架构设计及技术栈应用
物联网·websocket·网络协议·tcp/ip·微服务·udp·kafka
Nano叶落7 天前
Kafka 消费积压排查入门:Docker 搭环境亲手制造一次 ‘消息堵死‘,10 分钟看懂 Lag
kafka
吉甫作诵8 天前
Kafka 集群安装与运维实战:消费组排查、Offset 重置与副本重分配
大数据·运维·分布式·kafka·消息队列
imDwAaY8 天前
消息队列四大核心问题:顺序性、幂等性、可靠性与一致性
学习·kafka·rabbitmq
wno7049 天前
Spring Boot整合Kafka
spring boot·kafka
音符犹如代码9 天前
Kafka 接入 AI 的三条路线:MCP 提案、会话记忆与实时上下文
java·大数据·ai·kafka
happy_king_zi9 天前
kafka两种部署模式的区别
kafka·消息队列·sre
happy_king_zi9 天前
Kafka 3.9.2 KRaft 模式三节点集群完整部署指南
kafka·消息队列