docker快速部署kafka集群

此kafka集群用于测试

使用Docker Compose 多节点集群

GitHub 上有成熟的 KRaft 模式 3 节点集群方案,每个节点同时充当 Broker 和 Controller

yaml 复制代码
version: '3.8'

services:
  kafka1:
    image: apache/kafka:4.2.0
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9108,CONTROLLER://0.0.0.0:9109
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9112
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka1:9109,2@kafka2:9109,3@kafka3:9109
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
    ports:
      - "9112:9108"
    volumes:
      - kafka1-data:/var/lib/kafka/data

  kafka2:
    image: apache/kafka:4.2.0
    environment:
      KAFKA_NODE_ID: 2
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9108,CONTROLLER://0.0.0.0:9109
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9113
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka1:9109,2@kafka2:9109,3@kafka3:9109
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
    ports:
      - "9113:9108"
    volumes:
      - kafka2-data:/var/lib/kafka/data

  kafka3:
    image: apache/kafka:4.2.0
    environment:
      KAFKA_NODE_ID: 3
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9108,CONTROLLER://0.0.0.0:9109
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9114
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka1:9109,2@kafka2:9109,3@kafka3:9109
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
    ports:
      - "9114:9108"
    volumes:
      - kafka3-data:/var/lib/kafka/data

  kafka-ui:
    image: provectuslabs/kafka-ui:latest
    ports:
      - "9115:8080"
    environment:
      KAFKA_CLUSTERS_0_NAME: local-cluster
      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka1:9108,kafka2:9108,kafka3:9108
    depends_on:
      - kafka1
      - kafka2
      - kafka3

volumes:
  kafka1-data:
  kafka2-data:
  kafka3-data:

端口分配说明

用途 端口
容器内部 Broker 监听 9108
容器内部 Controller 监听 9109
外部访问 kafka1 9112
外部访问 kafka2 9113
外部访问 kafka3 9114
Kafka UI 9115

注意:如需调整自己按照端口号修改即可

启动

bash 复制代码
# 1. 先创建网络(可选)
docker network create kafka-net

# 2. 设置集群 ID
export KAFKA_CLUSTER_ID=$(docker run --rm apache/kafka:4.2.0 /opt/kafka/bin/kafka-storage.sh random-uuid)

# 3. 启动集群
docker compose up -d

# 4. 验证
docker ps
# 访问 http://localhost:9115 查看 Kafka UI
相关推荐
童槿顏丶8 小时前
docker自动化部署脚本
docker·eureka·自动化
爱莉希雅&&&11 小时前
K8s NFS+StorageClass+PV/PVC+Deployment 实战笔记
笔记·容器·kubernetes
GlueNa2SiO312 小时前
06-Docker存储与数据持久化
笔记·学习·docker
一位正在转型AI全栈的前端工程师13 小时前
前端转全栈:从 502 到 200,我的第一个 Docker+Nginx+Node.js 项目
docker·容器
jason_renyu13 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
linux·docker·新手docker学习·docker日志查询·docker服务管理
童槿顏丶14 小时前
Jenkins部署(Docker)
java·docker·jenkins
维核科技14 小时前
大模型私有化部署:Docker与Kubernetes实战避坑
docker·容器·kubernetes
呱呱巨基15 小时前
Docker 基础概念学习
linux·c++·学习·docker
七仔啊16 小时前
windows server 2022 安装 Linux Docker
linux·windows·docker