一、下载安装包,配置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
'