Docker部署Kafka消息队列系统完整指南

 更新时间:2025年07月07日 08:24:47   作者:huingymm  
在Docker中设置Kafka集群是一个相对简单的过程,因为它允许你快速地启动和配置多个Kafka实例,这篇文章主要介绍了Docker部署Kafka消息队列系统的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

本指南将详细介绍如何使用 Docker 部署 Kafka 消息队列系统,包括单节点和集群模式的部署方式。

1. 单节点部署 (Zookeeper + Kafka)

1.1 创建 docker-compose.yml 文件

version: '3.8'

services:
  zookeeper:
    image: bitnami/zookeeper:3.8
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
    volumes:
      - zookeeper_data:/bitnami/zookeeper

  kafka:
    image: bitnami/kafka:3.4
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://${HOST_IP}:9092
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
    volumes:
      - kafka_data:/bitnami/kafka
    depends_on:
      - zookeeper

volumes:
  zookeeper_data:
    driver: local
  kafka_data:
    driver: local

1.2 启动服务

export HOST_IP=$(hostname -I | awk '{print $1}')
docker-compose up -d

2. KRaft 模式部署 (无 Zookeeper)

2.1 创建 docker-compose.yml 文件

version: '3.8'

services:
  kafka:
    image: bitnami/kafka:3.4
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      - KAFKA_CFG_NODE_ID=1
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://${HOST_IP}:9092
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
    volumes:
      - kafka_data:/bitnami/kafka

volumes:
  kafka_data:
    driver: local

2.2 启动服务

export HOST_IP=$(hostname -I | awk '{print $1}')
docker-compose up -d

3. 集群部署 (3节点)

3.1 创建 docker-compose.yml 文件

version: '3.8'

services:
  zookeeper:
    image: bitnami/zookeeper:3.8
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
      - ZOO_SERVER_ID=1
      - ZOO_SERVERS=0.0.0.0:2888:3888
    volumes:
      - zookeeper_data:/bitnami/zookeeper

  kafka1:
    image: bitnami/kafka:3.4
    container_name: kafka1
    ports:
      - "9092:9092"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_BROKER_ID=1
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://${HOST_IP}:9092
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
    volumes:
      - kafka1_data:/bitnami/kafka
    depends_on:
      - zookeeper

  kafka2:
    image: bitnami/kafka:3.4
    container_name: kafka2
    ports:
      - "9093:9093"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_BROKER_ID=2
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://${HOST_IP}:9093
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
    volumes:
      - kafka2_data:/bitnami/kafka
    depends_on:
      - zookeeper

  kafka3:
    image: bitnami/kafka:3.4
    container_name: kafka3
    ports:
      - "9094:9094"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_BROKER_ID=3
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://${HOST_IP}:9094
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
    volumes:
      - kafka3_data:/bitnami/kafka
    depends_on:
      - zookeeper

volumes:
  zookeeper_data:
    driver: local
  kafka1_data:
    driver: local
  kafka2_data:
    driver: local
  kafka3_data:
    driver: local

3.2 启动集群

export HOST_IP=$(hostname -I | awk '{print $1}')
docker-compose up -d

4. 基本操作验证

4.1 创建主题

docker exec -it kafka kafka-topics.sh --create \
  --bootstrap-server localhost:9092 \
  --replication-factor 1 \
  --partitions 3 \
  --topic test-topic

4.2 生产消息

docker exec -it kafka kafka-console-producer.sh \
  --bootstrap-server localhost:9092 \
  --topic test-topic

4.3 消费消息

docker exec -it kafka kafka-console-consumer.sh \
  --bootstrap-server localhost:9092 \
  --topic test-topic \
  --from-beginning

4.4 查看主题列表

docker exec -it kafka kafka-topics.sh --list \
  --bootstrap-server localhost:9092

5. 管理技巧

5.1 数据持久化

所有数据卷都配置在 volumes 部分,确保数据不会因容器重启而丢失。

5.2 监控配置

docker stats kafka zookeeper

5.3 日志查看

docker logs -f kafka

5.4 停止和清理

docker-compose down
# 如需删除数据卷
docker-compose down -v

6. 注意事项

  • 生产环境建议使用 KRaft 模式或至少 3 个节点的集群
  • 根据实际需求调整 KAFKA_CFG_ADVERTISED_LISTENERS
  • 数据卷路径可根据需要修改
  • 内存限制可通过 -m 参数设置
  • 安全配置建议添加认证机制

通过以上配置,您可以快速部署适用于开发和测试环境的 Kafka 服务。生产环境请根据实际需求调整配置参数和安全设置。

到此这篇关于Docker部署Kafka消息队列系统的文章就介绍到这了,更多相关Docker部署Kafka内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker 安装部署多个MySQL的实现步骤

    docker 安装部署多个MySQL的实现步骤

    本文主要介绍了docker 安装部署多个MySQL的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Docker使用Swarm组建集群的方法

    Docker使用Swarm组建集群的方法

    Docker 使用 Swarm 可以很方便的在多个主机上创建容器集群,并且容器之间可以跨主机网络通信。这篇文章主要介绍了Docker使用Swarm组建集群,需要的朋友可以参考下
    2017-11-11
  • docker配置镜像加速器的方法步骤

    docker配置镜像加速器的方法步骤

    国内常见的Docker镜像加速器包括阿里云、网易云、腾讯云等,本文主要介绍了docker配置镜像加速器的方法步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 在docker上安装运行mysql实例

    在docker上安装运行mysql实例

    Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
    2017-01-01
  • 如何使用docker+frp进行内网穿透

    如何使用docker+frp进行内网穿透

    这篇文章主要介绍了使用docker+frp进行内网穿透,在公网上的ubuntu系统需要配置相关操作,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • Docker开启TLS和CA认证的方法步骤

    Docker开启TLS和CA认证的方法步骤

    本文主要介绍了Docker开启TLS和CA认证的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 详解java项目打包docker镜像的几种方式

    详解java项目打包docker镜像的几种方式

    本文主要介绍了详解java项目打包docker镜像的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 使用Dockerfile构建docker镜像

    使用Dockerfile构建docker镜像

    这篇文章主要介绍了使用Dockerfile构建docker镜像的方法,帮助大家更好的理解和学习使用docker,感兴趣的朋友可以了解下
    2021-04-04
  • docker-compose启动redis集群的实现步骤

    docker-compose启动redis集群的实现步骤

    本文主要介绍了docker-compose启动redis集群的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • docker保存镜像到本地并加载本地镜像文件详解

    docker保存镜像到本地并加载本地镜像文件详解

    平常我们下载docker镜像会通过配置国内源来加速下载,但是有时候会有另外的需求,比如某个机器不能联网,我们就需要从其他机器下载,打包后,拷贝到这个机器,下面这篇文章主要给大家介绍了关于docker保存镜像到本地并加载本地镜像文件的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论