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

相关推荐
花落已飘1 小时前
openEuler WSL2容器化开发实战:Docker Desktop集成与应用部署
运维·docker·容器
斯普信专业组6 小时前
Docker 常用命令与时区配置指南
docker·容器·eureka
天一生水water18 小时前
ubuntu使用毫秒镜像方式安装docker mysql
ubuntu·阿里云·docker
Qayrup21 小时前
docker 搭建私有仓库,推送并拉取
运维·docker·容器
郭庆汝21 小时前
docker拉取英伟达官方cuda11.8镜像
docker·cuda11.8
天下不喵1 天前
Ubuntu24.04安装Docker过程记录
docker
冷血~多好1 天前
使用docker部署elk,实现日志追踪
elk·docker·容器
天一生水water1 天前
docker-compose安装
运维·docker·容器
蓝象_1 天前
docker安装配置mysql
mysql·docker·容器