docker安装kafka非zookeeper版

发布于:2025-07-04 ⋅ 阅读:(15) ⋅ 点赞:(0)

1、首先安装docker compose

sudo apt install docker-compose

2、创建/app/kafka-kraft/data目录用于映射kafka数据目录

mkdir -p -m 777 /app/kafka-kraft/data

3、创建docker-compose.yml 并修改如下配置

version: '3.3'
services:
  kafka:
    image: bitnami/kafka:3.4  # 使用Bitnami提供的Kafka 3.4镜像,已内置KRaft支持
    container_name: kafka-kraft
    restart: unless-stopped  # 容器异常退出时自动重启
    hostname: kafka  # 固定主机名,确保Kafka UI能通过容器名解析到服务
    ports:
      - "9092:9092"    # 内部通信
      - "9093:9093"    # KRaft控制器通信
      - "9094:9094"   # 外部访问端口
    environment:
      # JVM堆内存配置(根据业务需求调整)
      - KAFKA_HEAP_OPTS=-Xms512M -Xmx1G  
      # KRaft模式核心配置[3,5](@ref)
      - KAFKA_ENABLE_KRAFT=yes  # 启用KRaft模式(替代ZooKeeper)
      - KAFKA_CFG_PROCESS_ROLES=broker,controller  # 节点同时承担Broker和Controller角色
      - KAFKA_CFG_NODE_ID=1  # 节点唯一ID(集群中需唯一)
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093  # 单节点选举配置(格式:id@host:port)
      # 监听器配置[3,6](@ref)
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094  # 定义三类监听器
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://192.168.0.186:9094  # 客户端访问地址(容器内通信需用容器名)
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,EXTERNAL:PLAINTEXT  # 安全协议映射
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER  # 指定Controller监听器名称
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT  # 指定Broker间通信使用的监听器名称
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false  # 生产环境建议关闭自动创建Topic
    volumes:
      - /app/kafka-kraft/data:/bitnami/kafka/data  # 数据持久化(避免容器重启丢失)
    networks:
      - kafka-net  # 加入自定义网络,确保容器间互通

  kafka-ui:
    image: provectuslabs/kafka-ui:latest  # 轻量级Kafka管理UI
    container_name: kafka-ui
    depends_on:
      - kafka  # 依赖Kafka服务先启动
    ports:
      - "19092:8080"  # 暴露UI访问端口(浏览器访问http://localhost:19092)
    environment:
      - AUTH_TYPE=LOGIN_FORM  # 启用表单登录认证
      - SPRING_SECURITY_USER_NAME=admin  # 管理员用户名
      - SPRING_SECURITY_USER_PASSWORD=admin  # 管理员密码
      # 集群配置(支持多集群,此处配置一个)[6,7](@ref)
      - KAFKA_CLUSTERS_0_NAME=kraft-cluster  # 集群显示名称
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092  # 使用Kafka容器名+内部端口(必须与Kafka的advertised.listeners一致)
      - DYNAMIC_CONFIG_ENABLED=true  # 允许通过UI动态修改配置(如添加Topic)
    networks:
      - kafka-net  # 与Kafka共享网络

networks:
  kafka-net:
    driver: bridge  # 创建桥接网络,隔离容器间通信

注意:

KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://192.168.0.186:9094  # 客户端访问地址(容器内通信需用容器名)

这里PLAINTEXT://kafka:9092 是内部容器通过kafka别名进行的通信,EXTERNAL://192.168.0.186:9094是外部通过ip进行访问的通信

4、执行命令

sudo docker-compose up -d

5、可视化访问

http://宿主机ip:19092  账号密码上方有配置:admin