docker搭建kafka集群

前置条件

  1. 已安装Docker Desktop(Windows/macOS 通用,Windows 建议启用 WSL2 后端)
  2. 基础的 C++ 编译环境(Windows 用 WSL2 Ubuntu,macOS 用 Xcode,Linux 直接用系统编译器)
  3. 网络正常(能拉取 Docker 镜像)

第一步:搭建 Kafka 集群(3 节点 + ZooKeeper)

1.1 新建集群目录

在电脑任意位置新建文件夹(比如 D:\kafka-cluster/home/kafka-cluster),后续所有操作都在这个目录下进行。

1.2 编写 docker-compose.yml 文件

在该目录下新建文件 docker-compose.yml复制粘贴以下内容(注释已写清楚,不用改):

复制代码
version: '3.8'

services:
  # ZooKeeper(Kafka <=2.8依赖,集群协调)
  zookeeper:
    image: confluentinc/cp-zookeeper:7.4.0
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    networks:
      - kafka-network

  # Kafka节点1
  kafka1:
    image: confluentinc/cp-kafka:7.4.0
    container_name: kafka1
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"  # 宿主机访问端口
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      # 关键:配置外部可访问的地址(host.docker.internal是Docker宿主机的别名)
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://host.docker.internal:9092,PLAINTEXT_INTERNAL://kafka1:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT_INTERNAL
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3  # 偏移量主题副本数(集群至少3节点)
    networks:
      - kafka-network

  # Kafka节点2
  kafka2:
    image: confluentinc/cp-kafka:7.4.0
    container_name: kafka2
    depends_on:
      - zookeeper
    ports:
      - "9093:9093"
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://host.docker.internal:9093,PLAINTEXT_INTERNAL://kafka2:29093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT_INTERNAL
    networks:
      - kafka-network

  # Kafka节点3
  kafka3:
    image: confluentinc/cp-kafka:7.4.0
    container_name: kafka3
    depends_on:
      - zookeeper
    ports:
      - "9094:9094"
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://host.docker.internal:9094,PLAINTEXT_INTERNAL://kafka3:29094
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT_INTERNAL
    networks:
      - kafka-network

# 自定义网络(集群内容器互通)
networks:
  kafka-network:
    driver: bridge
1.3 启动 Kafka 集群
  1. 打开终端(Windows 用 PowerShell/CMD,macOS/Linux 用终端),进入kafka-cluster目录:

    复制代码
    # Windows示例
    cd D:\kafka-cluster
    # macOS/Linux示例
    cd /home/kafka-cluster
  2. 启动集群(后台运行):

    复制代码
    docker-compose up -d
  3. 检查容器状态(正常应该都是Up):

    复制代码
    docker-compose ps

    输出示例:

    复制代码
    NAME        COMMAND                  SERVICE             STATUS              PORTS
    kafka1      "/etc/confluent/dock..."   kafka1              running             0.0.0.0:9092->9092/tcp
    kafka2      "/etc/confluent/dock..."   kafka2              running             0.0.0.0:9093->9093/tcp
    kafka3      "/etc/confluent/dock..."   kafka3              running             0.0.0.0:9094->9094/tcp
    zookeeper   "/etc/confluent/dock..."   zookeeper           running             0.0.0.0:2181->2181/tcp
1.4 验证集群是否正常
  1. 进入 kafka1 容器,创建测试主题(副本数 3,分区数 3,适配集群):

    复制代码
    docker exec -it kafka1 /bin/bash
  2. 在容器内执行创建主题命令:

    复制代码
    kafka-topics --create --topic test_topic --bootstrap-server kafka1:29092,kafka2:29092,kafka3:29092 --partitions 3 --replication-factor 3
  3. 查看主题信息(验证集群节点):

    复制代码
    kafka-topics --describe --topic test_topic --bootstrap-server kafka1:29092

    输出示例(能看到 3 个副本分布在 3 个节点):

    复制代码
    Topic: test_topic    TopicId: xxxxx    PartitionCount: 3    ReplicationFactor: 3    Configs: 
    Topic: test_topic    Partition: 0    Leader: 1    Replicas: 1,2,3    Isr: 1,2,3
    Topic: test_topic    Partition: 1    Leader: 2    Replicas: 2,3,1    Isr: 2,3,1
    Topic: test_topic    Partition: 2    Leader: 3    Replicas: 3,1,2    Isr: 3,1,2
  4. 退出容器:

    复制代码
    exit
相关推荐
_loehuang_14 小时前
Docker Compose 部署 Maven 私有库 nexus3
java·docker·maven·nexus·maven私有库
moxiaoran57531 天前
使用docker安装myql 8.0
运维·docker·容器
喵叔哟1 天前
15.故障排查与调试
后端·docker·容器·服务发现
梦帮科技1 天前
第三十四篇:开源社区运营:GitHub Stars增长策略
开发语言·前端·爬虫·python·docker·架构·html
长安即是故里1 天前
保姆级docker安装教程,含国内加速镜像地址
docker·docker安装教程·国内加速
原神启动11 天前
Docker-compose一键部署设备管理平台 nginx+mysql+springboot
mysql·nginx·docker
tzhou644521 天前
Docker的CICD持续集成
ci/cd·docker·容器
oMcLin1 天前
在RHEL 8系统上如何实现基于Docker的微服务架构,并进行自动化部署?
docker·微服务·架构
人工小情绪1 天前
docker常用命令
docker·容器