跳过正文

NAS 上用 Docker 快速搭建 Kafka(KRaft 模式)

·2 分钟· loading · loading ·
lixxix
作者
lixxix
关注科技,编程改变生活!
在 NAS 上跑 Kafka 听起来很重,但借助官方 apache/kafka 镜像的 KRaft 模式,一条命令就能搞定——不需要 Zookeeper,不需要 compose,单容器即用。

为什么选 KRaft 模式
#

旧版 Kafka 依赖 Zookeeper 做元数据管理,部署和维护都比较繁琐。从 Kafka 3.3 开始,KRaft 模式成为生产可用方案:

  • 去掉 Zookeeper:少一个组件,少一层复杂度
  • 单节点友好:NAS 或开发机上一条命令启动
  • 官方镜像原生支持apache/kafka:latest 内置 KRaft,开箱即用

一、创建 Docker 网络
#

建议先创建一个独立的桥接网络,方便后续扩展(比如加 Kafka UI):

docker network create kafka-net

二、一条命令启动 Kafka
#

直接复制运行即可:

docker run -d \
  --name kafka-server \
  --network kafka-net \
  -p 9092:9092 \
  -e KAFKA_NODE_ID=1 \
  -e KAFKA_PROCESS_ROLES=broker,controller \
  -e KAFKA_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
  -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
  -e KAFKA_CONTROLLER_QUORUM_VOTERS=1@localhost:9093 \
  -e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER \
  -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
  apache/kafka:latest

关键参数说明:

参数作用
KAFKA_PROCESS_ROLES=broker,controller该节点同时承担数据和管理工作
KAFKA_ADVERTISED_LISTENERS最关键——本地用 localhost,远程服务器换成公网 IP
KAFKA_CONTROLLER_QUORUM_VOTERSKRaft 投票者列表,单节点写自己即可
注意:如果你的 NAS 需要让局域网内其他设备访问 Kafka,KAFKA_ADVERTISED_LISTENERS 必须改为 NAS 的局域网 IP(如 192.168.1.100),否则客户端会连接失败。

三、验证是否正常运行
#

3.1 进入容器
#

docker exec -it kafka-server /bin/bash

3.2 创建 Topic
#

/opt/kafka/bin/kafka-topics.sh \
  --create \
  --topic test-topic \
  --bootstrap-server localhost:9092

3.3 发送消息
#

/opt/kafka/bin/kafka-console-producer.sh \
  --topic test-topic \
  --bootstrap-server localhost:9092

输入任意文本,按回车发送,Ctrl+C 退出。

3.4 消费消息
#

另开一个终端:

docker exec -it kafka-server \
  /opt/kafka/bin/kafka-console-consumer.sh \
  --topic test-topic \
  --from-beginning \
  --bootstrap-server localhost:9092

能收到刚才发送的消息,说明 Kafka 已经正常工作。


四、常用运维命令
#

查看 Topic 列表
#

docker exec -it kafka-server \
  /opt/kafka/bin/kafka-topics.sh \
  --list \
  --bootstrap-server localhost:9092

查看 Topic 详情(分区、副本)
#

docker exec -it kafka-server \
  /opt/kafka/bin/kafka-topics.sh \
  --describe \
  --bootstrap-server localhost:9092

查看特定 Topic:

docker exec -it kafka-server \
  /opt/kafka/bin/kafka-topics.sh \
  --describe \
  --topic test-topic \
  --bootstrap-server localhost:9092

五、推荐图形化管理工具
#

命令行用久了不太直观,可以部署一个 Web UI:

  • Kafka UI(推荐):功能全面,支持 Docker 一键部署,界面现代
  • Offset Explorer:桌面端工具,适合本地开发调试
  • CMAK(原 Kafka Manager):雅虎开源,适合管理大型集群

常见问题
#

连接超时 / 命令卡住 :检查 9092 端口是否可达。远程服务器需确认防火墙放行。

容器启动后立即退出 :通常是环境变量拼写错误或端口冲突,用 docker logs kafka-server 查看日志。

docker-compose 报错apache/kafka 新镜像与旧版 wurstmeister 的配置格式不兼容,建议直接用 docker run 或参照 KRaft 模式重新编写 compose 文件。

局域网设备连不上 :检查 KAFKA_ADVERTISED_LISTENERS 是否用了正确的 IP 地址,而非 localhost