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
'
相关推荐
我不会起名字3221 天前
Kafka 分区数到底设几个:吞吐量、顺序性与 rebalance 代价的取舍
kafka·消息队列·调优·分区
starzy19902 天前
深度拆解 Kafka 源码:Producer 构造器装配了哪些核心组件
分布式·kafka
我不会起名字3222 天前
Go 写 Kafka 消费者:sarama 的 3 个坑与优雅退出写法
kafka·消息队列·go·sarama
RobinXYuan4 天前
【Kafka 源码手记】02 Kafka 的核心哲学:Everything Is A Log
kafka·源码阅读
Sayai4 天前
Kafka 2.8→3.9.1 跨大版本升级实战:ZooKeeper 同步升级、数据目录迁移与回滚预案全流程
大数据·运维·分布式·zookeeper·kafka
guo_wen_qiang6 天前
kafka重复消费
分布式·kafka
ClouGence7 天前
开源数据库管理工具 CloudDM 4.4.0 发布,新增 Kafka、SAP HANA 数据源
数据库·kafka
RobinXYuan7 天前
【Kafka 源码手记】01 从消息队列到 Event Streaming
kafka·源码阅读
nvd118 天前
深入剖析:GCP Pub/Sub 与 Apache Kafka 对消息处理延迟与消费者卡死的处理机制异同
分布式·kafka·apache
笔墨登场说说8 天前
centos 8 使用 kafka_2.13-4.3.1.tgz 安装kafka
linux·kafka·centos