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
相关推荐
小陈运维33 分钟前
使用kubeadm初始化IPV4/IPV6集群
linux·docker·云原生·容器·kubernetes
Wang's Blog39 分钟前
Java 项目部署之 Docker工具快速入门: 容器命令练习:创建、改文件、重启到删除的完整闭环
java·开发语言·docker
笑洋仟1 小时前
k8s的Ingress配置问题
云原生·容器·kubernetes
垚垚学技术_聚焦云原生1 小时前
K8s OpenEBS LVM 动态存储 PVC Pending 排查记
云原生·容器·kubernetes
小锋学长生活大爆炸1 小时前
【工具】在 Android 手机上运行 Docker
android·docker·智能手机
吴声子夜歌1 小时前
Docker入门与实战——实战案例(分布式处理与大数据平台)
大数据·分布式·docker
JavaPub-rodert2 小时前
服务器不能访问 Docker Hub,镜像怎么搬过去?讲透 docker save、load、export、import 与离线镜像分发
运维·服务器·docker
m0_6464299710 小时前
Docker 完整核心知识点总结(超通俗易懂版)
运维·docker·容器
笔墨登场说说12 小时前
centos 8 使用 kafka_2.13-4.3.1.tgz 安装kafka
linux·kafka·centos
guo_wen_qiang12 小时前
kafka一直restarting,报错InconsistentClusterIdException
分布式·kafka