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
相关推荐
春天的菠菜3 小时前
【私服】一步部署 Docker 私服
java·docker·容器
栀椩3 小时前
Docker 命令速查手册
spring cloud·docker
眷蓝天3 小时前
Kubernetes etcd 技术指南
容器·kubernetes·etcd
梦梦代码精4 小时前
深度拆解:上门按摩系统如何成为本地生活“到家时代”的新引擎?
docker·小程序·uni-app·开源·生活·开源软件
再战300年4 小时前
通过docker实现mysql一主多从
mysql·docker·容器
富士康质检员张全蛋4 小时前
Kafka架构 HW和LEO
分布式·kafka
万里侯4 小时前
GitLab CI/CD流水线优化实战:从龟速到飞速的蜕变
微服务·容器·k8s
云游牧者4 小时前
K8S控制器全解-从RS到DaemonSet实战完全指南
云原生·容器·kubernetes·控制器
面向Google编程4 小时前
从零学习Kafka:调优
大数据·kafka