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
'
相关推荐
面向Google编程21 小时前
Kafka 成了 Agent 的「共享内存」,Flink 成了它的「大脑」
flink·kafka·agent
醉颜凉1 天前
Kafka ISR与AR深度解析:副本同步机制核心概念
分布式·架构·kafka·ar
2601_962295992 天前
Spark 和 Kafka 实现 Python 大规模情感分析
python·spark·kafka·情感分析·大规模处理
spter。2 天前
从一次关注到最终一致:Canal、Outbox 与 Kafka 如何解决关系链双写问题
分布式·kafka
creator_Li2 天前
Kafka的死信队列
kafka
想要打 Acm 的小周同学呀3 天前
Kafka消息队列出现挤压如何解决?
分布式·kafka
富士康质检员张全蛋3 天前
Kafka实战 自定义分区器 几种常见的分区器
分布式·kafka
starzy19903 天前
Flink基础之Flink批流数据读取处理案例剖析:从文件到 Kafka 的完整代码
大数据·flink·kafka
数智启示录4 天前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache