【问题标题】:Failed to collect cluster Default info java.lang.IllegalStateException: Error while creating AdminClient for Cluster Default无法收集集群默认信息 java.lang.IllegalStateException:为集群默认创建 AdminClient 时出错
【发布时间】:2022-11-23 23:40:22
【问题描述】:

我想使用 network_mode: bridge for kafka 以便能够通过 localhost:9092 从另一个服务到达 kafka

我正在尝试使用 provectus/kafka-ui 但是当我打开消费者菜单时出现以下错误

我的 docker-compose.yml 文件:

  kafka-ui:
    container_name: kafka-ui
    image: provectuslabs/kafka-ui:latest
    ports:
      - 8080:8080
    depends_on:
      - kafka
    environment:
      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
      KAFKA_CLUSTERS_0_JMXPORT: 9997

  kafka:
    image: johnnypark/kafka-zookeeper
    ports:
      - "2181:2181"
      - "9092:9092"
    network_mode: bridge
    environment:
      ADVERTISED_HOST: 127.0.0.1
      NUM_PARTITIONS: 1
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

日志错误:

2022-01-13 09:16:50,014 错误 [parallel-5] c.p.k.u.s.MetricsService:无法收集集群默认信息

java.lang.IllegalStateException:为集群默认创建 AdminClient 时出错

provectus/kafka-ui

【问题讨论】:

标签: apache-kafka


【解决方案1】:

我正在为 kafka 和 zookeeper 使用 johnnypark/kafka-zookeeper 库。我能够通过使用两个单独的库来解决这个问题,如下例所示

  zookeeper1:
    image: confluentinc/cp-zookeeper:5.2.4
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka1:
    image: confluentinc/cp-kafka:5.3.1
    depends_on:
      - zookeeper1
    ports:
      - 9093:9093
      - 9998:9998
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper1:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:29092,PLAINTEXT_HOST://localhost:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      JMX_PORT: 9998
      KAFKA_JMX_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka1 -Dcom.sun.management.jmxremote.rmi.port=9998

【讨论】:

    【解决方案2】:

    能够通过 localhost:9092 从另一个服务访问 kafka

    您不能使用 localhost 访问 Kafka,因为那将是 Kafka UI 容器本身。

    ADVERTISED_HOST 更改为 kafka 并使用来自其他容器的 kafka:9092 对于桥接网络是正确的。但是,这有一个副作用,即阻止在 Docker 网络之外访问 Kafka,例如直接在主机上的客户端。

    【讨论】:

      【解决方案3】:

      内部和外部客户端可以单独配置。 bitnami/bitnami-docker-kafka

      这是一个使用 Bitnami 的 Kafka Image 的示例——这允许主机客户端连接到端口 9093,同时允许 kafka-ui 连接到默认端口。

      version: "3"
      services:
        zookeeper:
          image: 'bitnami/zookeeper:latest'
          ports:
            - '2181:2181'
          environment:
            - ALLOW_ANONYMOUS_LOGIN=yes
        kafka:
          image: 'bitnami/kafka:latest'
          ports:
            - '9092:9092'
            - '9093:9093'
          environment:
            - KAFKA_BROKER_ID=1
            - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
            - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
            - KAFKA_CFG_LISTENERS=CLIENT://:9092,EXTERNAL://:9093
            - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka:9092,EXTERNAL://localhost:9093
            - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=CLIENT
            - ALLOW_PLAINTEXT_LISTENER=yes
          depends_on:
            - zookeeper
      
        kafka-ui:
          image: provectuslabs/kafka-ui
          container_name: kafka-ui
          ports:
            - "8081:8081"
          restart: always
          environment:
            - KAFKA_CLUSTERS_0_NAME=local
            - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
            - SERVER_PORT=8081
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多