16、Docker Compose 安装Kafka(含Zookeeper)

🚀 在 CentOS 9 上使用 Docker Compose 安装 Kafka(含 Zookeeper)教程

目录

  • 📌 [前言:为什么选择 Kafka](#前言:为什么选择 Kafka)
  • ⚙️ 环境准备
  • 🐳 [安装 Docker 和 Docker Compose](#安装 Docker 和 Docker Compose)
  • 📝 [创建 Kafka Docker Compose 配置(含 Zookeeper)](#创建 Kafka Docker Compose 配置(含 Zookeeper))
  • ▶️ [启动 Kafka 集群](#启动 Kafka 集群)
  • 🔍 [验证 Kafka 集群](#验证 Kafka 集群)
  • ⚠️ 生产环境注意事项
  • 总结

📌 前言:为什么选择 Kafka

Kafka 是一个 高吞吐、可扩展、分布式消息队列,在大数据、日志收集、实时分析和微服务通信中非常常用。

选择 Kafka 的理由:

  • 高吞吐量:每秒可处理百万级消息
  • 持久化存储:消息存储在磁盘上,保证可靠性
  • 可扩展性:支持集群扩展和分区(Partition)
  • 实时性:适合流处理和事件驱动架构
  • 生态丰富:与 Flink、Spark、Spring Boot 等轻松集成

Kafka 是企业级消息中间件的首选。


⚙️ 环境准备

  • 操作系统:CentOS 9 Stream
  • 内存:至少 2GB
  • 网络:可访问 Docker Hub 镜像

确保服务器网络畅通,否则镜像下载会失败。


🐳 安装 Docker 和 Docker Compose

Centos9 安装Docker


📝 创建 Kafka Docker Compose 配置(含 Zookeeper)

为什么需要 Zookeeper

Kafka 传统模式依赖 Zookeeper 来管理集群元数据:

  1. Broker 元数据:每个节点信息、分区、副本都由 Zookeeper 管理
  2. Controller 节点选举:保证集群高可用
  3. 集群管理:Topic 创建、分区分配

Zookeeper 就是 Kafka 集群的"大脑",保证集群节点间协调与元数据一致性。

1️⃣ 创建工作目录

bash 复制代码
mkdir -p /etc/docker/docker-kafka
cd /etc/docker/docker-kafka

说明:创建一个专门的目录来存放 Docker Compose 配置文件和数据卷。

2️⃣ 创建 docker-compose.yml

yaml 复制代码
version: '3.8'

services:
  zookeeper:
    image: bitnami/zookeeper:3.8
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      ALLOW_ANONYMOUS_LOGIN: "yes"
    restart: unless-stopped

  kafka:
    image: bitnami/kafka:3.5
    container_name: kafka
    ports:
      - "9092:9092"
      - "29092:29092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:29092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://0.0.0.0:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    depends_on:
      - zookeeper
    restart: unless-stopped

详细说明

  • Zookeeper

    • 镜像 bitnami/zookeeper:3.8
    • 端口 2181 对外开放
    • 管理 Kafka 元数据和 Broker 状态
  • Kafka Broker

    • KAFKA_BROKER_ID:唯一 Broker ID
    • KAFKA_ZOOKEEPER_CONNECT:连接 Zookeeper 地址
    • KAFKA_ADVERTISED_LISTENERS:客户端访问地址
    • KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:Kafka 内部主题副本数
  • volumes:映射 Docker socket,方便 Kafka 创建 Broker

  • depends_on:确保 Kafka 在 Zookeeper 启动后启动

通过 Zookeeper 模式可以保证 Kafka 0.x~3.x 版本的稳定集群管理。


▶️ 启动 Kafka 集群

bash 复制代码
docker compose up -d

说明

  • -d:后台启动容器
  • 使用 docker ps 查看容器状态,确保 zookeeperkafka 正常运行
bash 复制代码
docker ps

🔍 验证 Kafka 集群

1️⃣ 创建测试主题

bash 复制代码
docker exec -it kafka kafka-topics.sh --create --topic test --bootstrap-server kafka:9092 --partitions 1 --replication-factor 1

说明 :创建名为 test-topic 的主题,分区为 1,副本为 1。

2️⃣ 查看主题列表

bash 复制代码
docker exec -it kafka kafka-topics.sh --list --bootstrap-server kafka:9092

说明:确认主题创建成功。

3️⃣ 发送消息

bash 复制代码
docker exec -it kafka kafka-console-producer.sh --topic test --bootstrap-server kafka:9092
> hello kafka
> welcome

说明:向 Kafka 发送消息,用于测试生产者功能。

4️⃣ 消费消息

bash 复制代码
docker exec -it kafka kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server kafka:9092

说明:从头开始消费消息,验证 Kafka 正常工作。


⚠️ 生产环境注意事项

  • 集群扩展 :部署多 Broker,KAFKA_ADVERTISED_LISTENERS 使用宿主机 IP

  • 持久化存储:挂载数据卷到宿主机磁盘,保证重启不丢失数据

  • 安全加固

    • 启用 SSL/TLS
    • 配置 SASL 用户认证
    • 设置 ACL 访问控制
  • 监控告警

    • Prometheus + Grafana
    • Kafka JMX 指标监控

✅ 总结

  • Docker Compose 快速搭建 Zookeeper + Kafka 单机环境
  • Zookeeper 保证 Kafka 元数据管理和 Broker 集群稳定
  • 易于测试和学习 Kafka 原理
  • 支持生产环境扩展到多 Broker、多宿主机集群

Kafka 是企业级消息中间件首选,Docker Compose 能快速构建开发和测试环境,熟悉 Kafka 基本操作流程。

相关推荐
生活爱好者!9 分钟前
哇!影视新玩法!docker部署NEOWATCH NAS
运维·docker·容器
cpolar技术支持3 小时前
Docker 容器启动失败怎么查?端口、日志、权限与网络排障完整教程
linux·docker·容器·cpolar·网络排障
一技安身6 小时前
【大模型】Win11 部署 DeepSeek+ RAGFlow0.27.2 (Ollama方案,断网可用)
docker·ai·语言模型
新时代牛马6 小时前
docker run 起不来?从dockerd、containerd 到runc 一条线讲透
运维·docker·容器
JavaPub-rodert6 小时前
Docker 安装 MySQL 完整教程:从零部署数据库,到生产环境持久化配置
数据库·mysql·docker
努力努力再努力wz8 小时前
【Docker 入门系列】:从 Namespace、CGroup 到 LXC:理解容器运行时、rootfs 与 LXC 实战
运维·docker·容器
JavaPub-rodert9 小时前
Docker 多阶段构建:为什么生产环境镜像可以小 90%
运维·docker·容器
PC2005-cloud11 小时前
Qdrant 连接失败排查:localhost 解析到 __1,而 Docker 只绑了 IPv4
运维·docker·容器
喵喵爱自由11 小时前
Deepseek Harness镜像离线部署
docker·ai·语言模型
一技安身11 小时前
【信创】Ollama 手动提取 deepseek-r1:1.5b模型迁移到内网机器
服务器·docker·语言模型