前言
本文面向需要快速搭建 Kafka 开发环境的开发者。按照本文步骤操作,你可以在 10 分钟内完成 Kafka 与 Kafka UI 的部署,并立即开始消息的生产与消费调试。
拉取
java
docker pull apache/kafka
- 创建目录:mkdir -p /opt/kafka-data
java
docker run -d \
--name kafka \
-p 9092:9092 \
-v /opt/kafka-data:/var/lib/kafka/data \
apache/kafka:latest
- UI 安装
docker pull provectuslabs/kafka-ui:latest
docker network create kafka-net
把已有的 Kafka 容器加入网络
docker network connect kafka-net kafka
java
docker run -d \
--name kafka-ui \
-p 8080:8080 \
--network kafka-net \
-e KAFKA_CLUSTERS_0_NAME=local \
-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092 \
provectuslabs/kafka-ui:latest
总结与验证
部署完成后,建议按以下步骤验证环境是否正常:
- 查看容器状态:执行
docker ps,确认kafka与kafka-ui两个容器均处于Up状态。 - 访问 UI 地址:在浏览器打开
http://localhost:8080,进入 Kafka UI 控制台。 - 检查集群连接:在 UI 的 Cluster 页面确认
local集群显示为在线,且 Broker 数量为 1。
消息生产与消费验证
进入 Kafka 容器,使用官方命令行工具验证消息的生产与消费:
- 进入容器并创建主题
test-topic:
bash
docker exec -it kafka /opt/kafka/bin/kafka-topics.sh --create --topic test-topic --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092
预期输出:
text
Created topic test-topic.
- 启动生产者并发送消息:
bash
docker exec -it kafka /opt/kafka/bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
在交互提示符后输入以下内容并回车:
text
hello kafka
- 另开一个终端,启动消费者接收消息:
bash
docker exec -it kafka /opt/kafka/bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
预期输出:
text
hello kafka
说明:若容器内脚本路径不同,可先执行
docker exec -it kafka ls /opt/kafka/bin确认实际路径。消费者成功打印出生产者发送的消息,即说明 Kafka 消息收发功能正常。
常见问题排查
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 容器启动后立即退出 | 端口被占用或数据目录权限不足 | 执行 docker logs kafka 查看日志,调整 -p 端口映射或修改 /opt/kafka-data 目录权限 |
| UI 无法访问 | kafka-ui 容器未加入 kafka-net 网络,或 KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS 指向错误 |
确认 kafka-ui 容器已加入 kafka-net 网络,且 KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS 指向的 kafka:9092 与容器名一致 |
| UI 显示集群离线 | kafka 容器未正常运行,或两个容器不在同一网络 |
检查 kafka 容器是否正常运行,并确认两个容器处于同一网络 kafka-net 中 |
Kafka 容器日志报错 Connection refused |
kafka-ui 无法连接 kafka:9092,通常是网络未连通或 Kafka 尚未就绪 |
确认两个容器在同一网络 kafka-net 中,并等待 Kafka 完全启动后再访问 UI;必要时执行 docker logs kafka 查看 Kafka 启动状态 |
清理与卸载
如需停止并删除 Kafka 与 Kafka UI 容器,可执行以下命令:
bash
docker stop kafka kafka-ui && docker rm kafka kafka-ui
删除自定义网络 kafka-net:
bash
docker network rm kafka-net
提示:如需保留 Kafka 数据,请在删除容器前先备份
/opt/kafka-data目录,例如执行cp -r /opt/kafka-data /opt/kafka-data-backup。