当前位置: 首页 > news >正文

Docker 部署 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. 注意事项

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

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

相关文章:

  • 系统编程3(共享内存/信号量)
  • 【数据结构与算法】——堆(补充)
  • 人的需求更多是动物本能—观《枪王》
  • 计算视觉与数学结构及AI拓展
  • 【家政平台开发(41)】家政平台性能蜕变:性能测试与优化全解析
  • Spring Boot 中应用的设计模式
  • Spring Security + JWT 实现前后端分离权限控制实战教程
  • 机器人仿真:URDF与Gazebo
  • 学习MySQL的第九天
  • 【C++】 —— 笔试刷题day_15
  • Spring - 14 ( 5000 字 Spring 入门级教程 )
  • Linux网络http与https
  • LeetCode面试热题150中6-11题学习笔记(用Java语言描述)
  • 通过 spring ai 对接 deepseek ai 大模型通过向量数据库,完成 AI 写标书及构建知识库功能的设计与开发
  • 简约美观的地址发布页PHP源码带后台
  • 【3】k8s集群管理系列--包应用管理器helm之chart资源打包并推送到harbor镜像仓库
  • 粉末冶金齿轮学习笔记分享
  • Honor of Kings (S39) 13-win streak
  • Python中NumPy的随机操作
  • 5.1 GitHub订阅监控系统实战:FastAPI+SQLAlchemy高效架构设计与核心源码揭秘
  • 特朗普会晤南非总统发生言语冲突
  • 国家能源局:成立核电工程定额专家委员会
  • 渝昆高铁云南段路基土石方工程已完成97%,桥隧施工完成超90%
  • 广东7月起施行:不得以任何方式强制购买中小学校服或捆绑销售
  • “集团结婚”:近百年前革新婚俗的尝试
  • 人民日报:不能层层加码,要层层负责