Apache kafka 无效接收大小

Aug*_*ust 4 apache-kafka docker

我正在运行以下 docker compose:

version: '3'
services:
    zookeeper:
        image: wurstmeister/zookeeper
        ports:
            - '2181:2181'
    kafka:
        image: wurstmeister/kafka:2.12-2.3.0
        ports:
          - "9094:9094"
        environment:
            KAFKA_ADVERTISED_HOST_NAME: $HOST
            KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
            KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
            KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://$HOST:9094
            KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9094
            KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
            # KAFKA_SOCKET_REQUEST_MAX_BYTES: 1347375956
        volumes:
            - 'kafka_vol:/var/run/docker.sock'
    ui:
        image: landoop/kafka-topics-ui
        ports:
            - "8000:8000"
        environment:
            KAFKA_REST_PROXY_URL: http://kafka:9092
            PROXY: "true"
            MAX_BYTES: 50000
            LAZY_LOAD_TOPIC_META: "true"
            PROXY_SKIP_VERIFY: "true"
volumes:
    kafka_vol: {}
Run Code Online (Sandbox Code Playgroud)

服务器:

服务器是8GB RAM,当查看时docker stats,kafka和zookeeper加起来几乎不超过1G。

问题:

完成全新安装后,我尝试landoop/kafka-topics-ui在浏览器中打开,但是请求失败,并且我注意到在 docker compose 日志中显示了以下错误:

[2019-07-22 07:41:29,540] org.apache.kafka.common.network.InvalidReceiveException:无效接收(大小= 1195725856大于104857600)

当我进入 kafka 容器并运行时,发生了同样的错误curl http://localhost:9092/topics。完成全新安装后,我尝试landoop/kafka-topics-ui在浏览器中打开,但是请求失败,并且我注意到在 docker compose 日志中显示了以下错误:

[2019-07-22 07:41:29,540] org.apache.kafka.common.network.InvalidReceiveException:无效接收(大小= 1195725856大于104857600)

当我进入 kafka 容器并运行时,发生了同样的错误curl http://localhost:9092是什么导致了这个问题?

Mic*_*son 8

您无法通过 HTTP 直接访问 Kafka。您收到的错误是因为您向 Kafka 发送了 HTTP 请求。错误消息中的大小1195725856是 HTTP 请求的前 4 个字节!

1195725856是一个可识别的值,它被GET解码为一个整数:

>>> struct.unpack("!I", struct.pack("!4s", "GET ".encode("UTF8")))
(1195725856,)
Run Code Online (Sandbox Code Playgroud)

为了使用landoop/kafka-topics-ui,您需要安装confluenceinc/kafka-rest代理,它在 Kafka 前面提供 HTTP 端点。README中提到了这一点:

浏览 Kafka 主题并了解集群上发生的情况。查找主题/查看主题元数据/浏览主题数据(kafka消息)/查看主题配置/下载数据。这是用于 confluenceinc/kafka-rest 代理的 Web 工具。