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 基本操作流程。

相关推荐
Devin~Y37 分钟前
电商场景下的Java面试实战:从Spring Boot微服务到Kafka、Redis与AI RAG
java·spring boot·redis·elasticsearch·spring cloud·微服务·kafka
名字还没想好☜2 小时前
Docker 多阶段构建:把镜像从 1.2GB 砍到 15MB
运维·docker·容器·多阶段构建·镜像优化
AllData公司负责人3 小时前
数据同步平台|AIIData数据中台实现MySQL、Hive、Kafka 一键接入Doris
大数据·数据库·hive·mysql·kafka·实时同步
hj2862515 小时前
Docker 核心知识点整理(网络 + Dockerfile + 原理 + 命令)
网络·docker·容器
梦想的颜色13 小时前
【Docker原理】Docker 容器一文打尽:生命周期、环境管控、迁移备份、日志进程排查、垃圾清理
运维·docker·容器·容器生命周期·容器日志排查·容器迁移备份·容器进程管理
极客先躯20 小时前
高级java每日一道面试题-2026年03月30日-实战篇[Docker]-如何监控容器的网络流量?
java·运维·docker·容器·prometheus·高级面试
大E帝国子民11 天前
Docker 部署 RocketMQ 5
docker·容器·rocketmq
江湖有缘1 天前
【保姆级教程】使用Docker Compose一键搭建Picsur私有图床服务
java·docker·容器
java_logo1 天前
5 分钟共享打印机:用 Docker 一键部署 CUPS
运维·docker·容器·cups·网络打印机·共享打印机·docker部署cups
fen_fen1 天前
Docker部署PostgreSQL10 开启SSL和证书安装文档
docker·容器·ssl