在 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_VOTERS | KRaft 投票者列表,单节点写自己即可 |
注意:如果你的 NAS 需要让局域网内其他设备访问 Kafka,
KAFKA_ADVERTISED_LISTENERS 必须改为 NAS 的局域网 IP(如 192.168.1.100),否则客户端会连接失败。三、验证是否正常运行#
3.1 进入容器#
docker exec -it kafka-server /bin/bash3.2 创建 Topic#
/opt/kafka/bin/kafka-topics.sh \
--create \
--topic test-topic \
--bootstrap-server localhost:90923.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。
