服务器Kafka教程:单机部署、启动验证与常见报错处理
在 Linux 服务器上部署单机 Kafka,核心就三步:装好 JDK、用 KRaft 模式配置 Kafka、启动后通过创建主题和收发消息验证。
下面按顺序给出可直接照做的命令和配置,环境以常见的 Linux 发行版为例,Kafka 版本以你下载的实际版本为准。
准备条件与版本确认
Kafka 依赖 Java 运行环境,先确认服务器是否已安装 JDK。
java -version
如果提示找不到命令,需要先装 JDK。
以 OpenJDK 11 为例:
# Debian/Ubuntu 系
sudo apt update
sudo apt install -y openjdk-11-jdk
# CentOS/RHEL 系
sudo yum install -y java-11-openjdk
装完再执行 java -version,能输出版本号即可。
建议服务器内存不低于 2GB,Kafka 和 ZooKeeper/KRaft 元数据进程会占用一定内存。
下载 Kafka 二进制包时,建议从官方网站获取,命令中的版本号请替换为实际下载的版本:
cd /opt
sudo wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
sudo tar -xzf kafka_2.13-3.7.0.tgz
sudo mv kafka_2.13-3.7.0 kafka
如果服务器无法直接访问外网,可先在本地下载再用 scp 上传。
配置 KRaft 模式并启动
较新的 Kafka 版本已经支持用 KRaft 模式替代 ZooKeeper,单机部署更简单。
进入配置目录:
cd /opt/kafka/config/kraft
ls
通常会看到 server.properties。
先为这个节点生成一个集群 ID:
cd /opt/kafka
bin/kafka-storage.sh random-uuid
命令会输出一串 UUID,把它记下来,然后格式化存储目录:
bin/kafka-storage.sh format -t 你生成的UUID -c config/kraft/server.properties
格式化成功后,启动 Kafka:
bin/kafka-server-start.sh -daemon config/kraft/server.properties
加 -daemon 表示后台运行。
启动后检查进程和端口:
jps
ss -tlnp | grep 9092
如果 jps 能看到 Kafka 进程,并且 9092 端口处于监听状态,说明服务已经起来。
用主题和消息验证是否可用
服务启动不代表队列能正常读写,建议实际创建一个主题并收发一条消息。
创建主题:
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
查看主题列表:
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
能列出 test-topic 即创建成功。
接着开一个生产者发送消息:
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
输入任意一行文字后回车,再按 Ctrl+C 退出。
另开一个终端启动消费者:
bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
如果能看到刚才发送的内容,说明生产、存储、消费链路正常。
验证完可按 Ctrl+C 退出消费者。
常见报错与避坑提醒
启动失败时,优先看日志而不是反复重启:
tail -n 100 /opt/kafka/logs/server.log
几个高频问题:
- 端口被占用:9092 被其他程序占用时,可在
server.properties中修改listeners和advertised.listeners的端口,再重启。 - 内存不足:如果进程启动后立刻退出,检查
KAFKA_HEAP_OPTS或启动脚本中的堆内存设置,小内存机器可适当调低。 - 重复格式化:
kafka-storage.sh format对已有数据的目录重复执行可能导致数据异常,格式化前确认目录为空或已备份。 - 防火墙未放行:本机验证用
localhost通常不受影响,但远程客户端连接需要放行对应端口。 - 监听地址写错:
advertised.listeners必须是客户端能访问到的地址,写localhost时远程机器连不上。
修改任何配置后都需要重启 Kafka 才能生效。
生产环境还要注意什么
单机部署适合学习和测试,正式环境要考虑副本、磁盘和监控。
Kafka 默认会把消息写到 log.dirs 指定的目录,磁盘写满会导致服务异常,建议单独挂载数据盘并设置清理策略。
如果只是本地开发验证,上面的单机 KRaft 方案已经够用;
如果要做高可用,需要规划多节点集群和副本因子,这属于更进一步的部署内容。
遇到启动或收发消息异常时,先回到日志和端口检查这两步,多数问题能定位到具体原因。