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 Compose 构建完整服务实战指南:从入门到最佳实践
docker·容器
行百里er6 小时前
5 分钟跑起 Redis(Docker 版)
redis·后端·docker
Mr.朱鹏6 小时前
Docker三剑客实战指南:Docker、Dockerfile 和 Docker Compose
python·docker·devops·dockerfile
鬼先生_sir7 小时前
Docker 完整教程
docker
java_logo7 小时前
Docker 一键部署 Jellyfin:快速搭建私有化媒体服务器
docker·私有化部署·jellyfin·硬件加速·媒体服务器·轩辕镜像·影音库
吉甫作诵8 小时前
Kafka 集群安装与运维实战:消费组排查、Offset 重置与副本重分配
大数据·运维·分布式·kafka·消息队列
jianpeng的工程笔记9 小时前
WeKnora 搭建研发 EDA 知识库:Docker 部署、RAG 与 Wiki 实践
docker·知识库·eda·rag
imDwAaY9 小时前
消息队列四大核心问题:顺序性、幂等性、可靠性与一致性
学习·kafka·rabbitmq
ZeroNews内网穿透9 小时前
内网部署 Halo 建站,用 ZeroNews 免费内网穿透安全发布到公网(无公网 IP 也能 HTTPS 访问)
docker·https·内网穿透·nas·反向代理·halo·zeronews
wno70421 小时前
Spring Boot整合Kafka
spring boot·kafka