【Docker】手把手教你使用Docker安装kafka【详细教程】

[复制链接]
发表于 2026-10-3 15:31:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

用 Docker 部署 Kafka 的完整流程:从 Zookeeper 到收发消息

Kafka 本身依赖 Zookeeper 做元数据管理,原生安装要处理 JDK、配置文件、broker id 一堆细节。用 Docker 容器化之后,这两层都能用官方维护的社区镜像快速拉起来。下面是从零到能收发消息的一整套操作。

前提条件

开始前确认三件事:

  • 宿主机已经装好 Docker(Windows 下装 Docker Desktop,Linux 直接装 docker-ce)。
  • Docker 服务处于运行状态。
  • 网络端口可用:Zookeeper 用 2181,Kafka 用 9092,确认没被其他进程占用。

第一步:安装并运行 Zookeeper

Kafka 2.x 之前必须依赖 Zookeeper,先把它拉起来:

# 拉取镜像
docker pull wurstmeister/zookeeper

# 启动容器,映射 2181 端口
docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper

这条命令会起一个名为 zookeeper 的容器,并把容器的 2181 端口映射到宿主机的 2181。用 docker ps 能看到状态为 Up 就说明起来了。

第二步:启动 Kafka 容器

先拉镜像:

docker pull wurstmeister/kafka

然后启动,重点是几个环境变量:

docker run -d --name kafka \
  -p 9092:9092 \
  --link zookeeper:zookeeper \
  -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
  -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
  -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
  -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
  wurstmeister/kafka

逐个说明:

  • --name kafka:容器名。
  • -p 9092:9092:把 Kafka 的端口映射出来。
  • --link zookeeper:zookeeper:把 Zookeeper 容器链进当前网络,容器内可以直接用 zookeeper 这个主机名访问它。
  • KAFKA_ZOOKEEPER_CONNECT:Zookeeper 连接串。
  • KAFKA_ADVERTISED_LISTENERS:advertised listeners,客户端真正用来连的地址,生产环境建议填宿主机 IP 而不是 localhost。
  • KAFKA_LISTENERS:容器内监听地址。
  • KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:offset topic 副本数,单机环境必须是 1,填大了会起不来。

如果 Zookeeper 容器名字不同,或者用了自定义网络,--link 和 KAFKA_ZOOKEEPER_CONNECT 的值要跟着改。

第三步:验证是否正常运行

进入 Kafka 容器:

docker exec -it kafka /bin/bash

如果这一步就报错,形如 Error response from daemon: Container xxx is not running,说明容器没起来,按下面的顺序排错。

3.1 查看容器状态

docker ps -a

在列表里找到 zookeeper 和 kafka,看 STATUS 字段。如果显示 Exited,说明容器已经停止,重点查这两个。

3.2 查看容器日志日志

docker logs 62b9c056c0aa

这里的容器 ID 前缀从 docker ps -a 的输出里复制完整 ID 的前几位。日志日志末尾通常能看到容器退出的原因,比如端口被占用、Zookeeper 连不上、内存不足等。

3.3 重新启动容器

把根因解决之后重启:

docker start 62b9c056c0aa

3.4 创建测试主题并收发消息

在容器里执行:

# 创建主题
kafka-topics.sh --create --topic test --partitions 1 --replication-factor 1 --zookeeper zookeeper:2181

# 启动一个生产者,然后在终端里输入任意内容并回车
kafka-console-producer.sh --broker-list localhost:9092 --topic test

# 另开一个终端(同样要进容器)启动消费者
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

如果消费者一侧能看到生产者输入的内容,整条链路就通了。

常见问题速查

  • 容器内 bash 不存在:换成 docker exec -it kafka /bin/sh。
  • 客户端连不上 9092:九成是 KAFKA_ADVERTISED_LISTENERS 填了 localhost,外部机器解析不到,改成宿主机内网 IP。
  • Linux 防火墙挡住端口:用 firewall-cmd --list-ports 检查,放行 9092 和 2181。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表