该问题是在生产环境下碰到的问题,问题现象就是Kafka客户端在连接Kafka服务时特别慢,通常需要60秒左右才能连接上,连接上后经常出现客户端断开的现象。

部署配置:

version: '3.8'

services:
  kafka:
    image: bitnami/kafka:3.8
    container_name: "kafka"
    restart: always
    environment:
      # Kafka 同时作为 broker 和 controller 运行
      - KAFKA_CFG_PROCESS_ROLES=broker,controller
      # 节点 ID,必须唯一标识该节点
      - KAFKA_CFG_NODE_ID=1
      # 配置 controller 节点,用于管理集群元数据,监听端口为 9093
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093
      # Kafka 各种协议的监听配置
      # SASL_PLAINTEXT:用于 broker 与客户端通信的协议,端口为 9092
      # CONTROLLER:用于 controller 间的通信,端口为 9093,采用 PLAINTEXT 协议
      - KAFKA_CFG_LISTENERS=SASL_PLAINTEXT://kafka:9092,CONTROLLER://kafka:9093
      
      # 告诉 Kafka CONTROLLER 使用哪个监听器
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      
      # Kafka 向客户端公布的监听地址,这里监听的是 SASL_PLAINTEXT 协议的 broker
      - KAFKA_CFG_ADVERTISED_LISTENERS=SASL_PLAINTEXT://192.168.11.112:9092
      
      # Kafka broker 间通信时使用 SASL_PLAINTEXT 协议
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=SASL_PLAINTEXT

      # 定义各监听器的安全协议,SASL_PLAINTEXT 用于 broker,PLAINTEXT 用于 controller
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=SASL_PLAINTEXT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT
      
      # 启用的 SASL 认证机制,这里使用 PLAIN 认证
      - KAFKA_CFG_SASL_ENABLED_MECHANISMS=SCRAM-SHA-256
      
      # 设置 broker 间通信的 SASL 认证机制,使用 PLAIN
      - KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=SCRAM-SHA-256
 
      # 启用 ACL 权限控制,通过 SimpleAclAuthorizer 实现
      # zk模式 kafka.security.authorizer.AclAuthorizer
      # kraft模式 org.apache.kafka.metadata.authorizer.StandardAuthorizer
      - KAFKA_CFG_AUTHORIZER_CLASS_NAME=org.apache.kafka.metadata.authorizer.StandardAuthorizer
      
      # 禁止无 ACL 规则时默认允许所有用户访问
      - KAFKA_CFG_ALLOW_EVERYONE_IF_NO_ACL_FOUND=true
      
      # 设置 Kafka 的超级用户(具有所有资源的完全访问权限)
      # User:Bob;User:Alice
      - KAFKA_CFG_SUPER_USERS=User:admin

      #配置controller用户信息
      - KAFKA_CONTROLLER_USER=admin
      - KAFKA_CONTROLLER_PASSWORD=admin@2024

      # 配置 broker 的 SASL JAAS 认证信息
      - KAFKA_INTER_BROKER_USER=admin
      - KAFKA_INTER_BROKER_PASSWORD=admin@2024
      # - KAFKA_CLIENT_USERS=junpzx,test
      # - KAFKA_CLIENT_PASSWORDS=junpzx@2024,test@2024

      # 配置 Kafka 数据存储目录,挂载到容器外部
      - KAFKA_CFG_LOG_DIRS=/bitnami/kafka/data
      - KAFKA_CFG_METADATA_LOG_DIR=/bitnami/kafka/metadata/

      # KAFKA消息大小限制
      - KAFKA_MESSAGE_MAX_BYTES=10000000
    ports:
      # 映射 Kafka 的 broker 端口 (SASL_PLAINTEXT://kafka:9092) 到宿主机的 9092 端口
      - "9092:9092"
    # 挂载卷,将 Kafka 数据目录映射到宿主机的 ./kafka-data 目录
    volumes:
      - ./workspace/kafka:/bitnami/kafka
  # 服务名
  kafka-console-ui:
    image: "junpzx/kafka-console-ui:1.0.11"
    container_name: "kafka-console-ui"
    restart: always
    ports:
      - "7766:7766"
    volumes:
      - ./workspace/kafka-console-ui/data:/app/data
      - ./workspace/kafka-console-ui/log:/app/log
    privileged: true

该问题主要是因为直接使用了IP来配置外部客户端的访问地址,可能是因为该配置导致DNS解析问题,所以导致特别慢

解决方法就是外部不直接使用IP访问而是通过域名的方式进行访问,改造后的配置: