银河麒麟上kafka启动异常需依次排查:一、安装适配arm的毕昇jdk 17并配置环境变量;二、启用kraft模式,正确设置process.roles、node.id、controller.quorum.voters等参数并初始化元数据;三、在/etc/hosts中精确映射各节点ip与主机名,确保grpc通信;四、创建kafka用户并赋权,避免权限问题;五、以kafka用户启动服务,验证9092/9093端口监听及controller状态。

如果您在银河麒麟操作系统上部署Kafka作为分布式消息中间件,但服务无法正常启动或节点间通信异常,则可能是由于JDK版本不兼容、Kraft模式配置缺失或网络主机名解析失败所致。以下是解决此问题的步骤:
一、验证并安装适配ARM架构的JDK
银河麒麟V10运行于鲲鹏或飞腾等ARM平台,必须使用aarch64架构的JDK,x86版本JDK将导致Kafka进程启动失败或JVM崩溃。毕昇JDK 17是官方推荐且经信创认证的运行时环境。
1、卸载系统预装的非ARM JDK(如存在):
sudo yum -y remove java-1.8.0-* java-11.*
2、下载毕昇JDK 17 ARM版压缩包:
wget https://mirrors.huaweicloud.com/kunpeng/archive/compiler/bisheng_jdk/bisheng-jdk-17.0.8-linux-aarch64.tar.gz
3、解压并建立软链接:
sudo mkdir -p /opt/soft/java
sudo tar -zxf bisheng-jdk-17.0.8-linux-aarch64.tar.gz -C /opt/soft/java
sudo ln -snf /opt/soft/java/bisheng-jdk-17.0.8 /opt/soft/java/java
4、配置全局环境变量:
sudo su -c 'echo "export JAVA_HOME=/opt/soft/java/java" >> /etc/profile'
sudo su -c 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile'
source /etc/profile
5、验证安装:
java -version 应输出 bisheng-jdk-17.0.8,且包含 aarch64 字样
二、配置Kraft模式免ZooKeeper集群
Kafka 3.3+默认启用Kraft(Kafka Raft Metadata mode),需禁用ZooKeeper依赖并显式声明controller角色。该模式要求所有节点同时承担broker与controller职责,避免单点故障及组件耦合。
1、进入Kafka配置目录:
cd /opt/soft/kafka/config/kraft/
2、复制模板配置:
cp server.properties server.properties.bak
cp /opt/soft/kafka/config/kraft/server.properties .
3、编辑 server.properties,确保以下参数已设置:
process.roles=broker,controller
node.id=1(第二节点设为2,第三节点设为3)
controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
advertised.listeners=PLAINTEXT://对应节点实际IP:9092
inter.broker.listener.name=PLAINTEXT
4、生成集群元数据日志目录:
mkdir -p /data/kafka/kraft-combined-logs
chown -R kafka:kafka /data/kafka
5、初始化元数据(仅首次在任一节点执行):
sudo -u kafka /opt/soft/kafka/bin/kafka-storage.sh format -t 唯一集群ID,如:XyZ7mQnT -c /opt/soft/kafka/config/kraft/server.properties
三、配置主机名与网络互通性
Kraft模式下各节点通过hostname进行gRPC通信,若/etc/hosts未正确映射IP与主机名,controller选举将超时失败,表现为kafka-server-start.sh卡在“Initializing controller”阶段。
1、确认当前主机名:
hostname
2、编辑 hosts 文件:
sudo vi /etc/hosts
3、添加全部集群节点映射(以三节点为例):
192.168.65.10 node1
192.168.65.11 node2
192.168.65.12 node3
4、验证连通性:
ping -c 3 node2
telnet node2 9093(测试controller端口)
5、开放防火墙端口:
sudo firewall-cmd --permanent --add-port=9092/tcp
sudo firewall-cmd --permanent --add-port=9093/tcp
sudo firewall-cmd --reload
四、创建专用用户与权限隔离
直接使用root运行Kafka存在安全风险,且Kraft日志目录若由root创建,会导致kafka用户无写入权限,引发“Permission denied”错误。
1、新增kafka系统用户:
sudo adduser kafka
2、赋予sudo免密执行权限(可选,用于后续服务管理):
echo "kafka ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/kafka
3、变更Kafka安装目录所有权:
sudo chown -R kafka:kafka /opt/soft/kafka
sudo chown -R kafka:kafka /data/kafka
4、切换至kafka用户验证路径权限:
sudo -u kafka ls -ld /data/kafka/kraft-combined-logs
5、确认输出中包含drwxr-xr-x 2 kafka kafka,表示目录可写
五、启动Kafka服务并验证监听状态
使用kafka用户启动服务后,需确认两个关键端口(9092用于客户端通信,9093用于controller Raft协议)均处于LISTEN状态,否则生产者/消费者连接将被拒绝。
1、后台启动Kafka服务:
sudo -u kafka /opt/soft/kafka/bin/kafka-server-start.sh -daemon /opt/soft/kafka/config/kraft/server.properties
2、检查Java进程是否运行:
sudo -u kafka jps -l | grep Kafka
3、检查端口监听情况:
ss -tuln | grep ':909[23]'
4、验证controller健康状态:
sudo -u kafka /opt/soft/kafka/bin/kafka-metadata-quorum.sh --bootstrap-server localhost:9092 describe --status
5、预期返回中应包含Ready: true及当前leader node.id











