linux搭建kafka

前言

本文面向需要快速搭建 Kafka 开发环境的开发者。按照本文步骤操作,你可以在 10 分钟内完成 Kafka 与 Kafka UI 的部署,并立即开始消息的生产与消费调试。

拉取

java 复制代码
 docker pull apache/kafka
  1. 创建目录: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
  1. 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 容器,使用官方命令行工具验证消息的生产与消费:

  1. 进入容器并创建主题 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.
  1. 启动生产者并发送消息:
bash 复制代码
docker exec -it kafka /opt/kafka/bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092

在交互提示符后输入以下内容并回车:

text 复制代码
hello kafka
  1. 另开一个终端,启动消费者接收消息:
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。

相关推荐
呉師傅5 小时前
得力P2500、M2500系列打印机硒鼓加粉及清零方法【纯享版】
运维·网络·windows·电脑
Sayai5 小时前
Elasticsearch 日志检索 DSL 实战:时间范围查询、字段去重、分钟级统计与最新日志获取
大数据·运维·elasticsearch·搜索引擎·日志分析
qetfw6 小时前
Debian Chrony 时间同步、RAID5 与 LUKS 磁盘加密配置
linux·debian
fb_123457 小时前
MySQL运维实战:备份恢复+主从复制+读写分离+MHA高可用(超详细手把手教程)
运维·mysql·oracle
东城居士8 小时前
Linux驱动阻塞与非阻塞访问的理解
linux·嵌入式系统
..Dauntless..8 小时前
【Linux】进程地址空间初步理解
linux·运维·服务器
Julien20048 小时前
Docker 网络(一)
linux·运维·服务器·ssh·学习方法
字节跳动的猫9 小时前
LikeShop 积分体系全链路改造:获取规则、订单抵扣与积分商品兑换二开
运维·数据结构
杨云龙UP9 小时前
一次数据库查询缓慢故障复盘:大表数据增长、SQL全表扫描导致系统响应异常
linux·运维·服务器·数据库·sql·mysql
PellyKoo9 小时前
【linux运维】ubuntu+samba 用户组独占目录权限配置踩坑记
linux·运维·ubuntu