【问题标题】:Apache kafka invalid receive sizeApache kafka 无效接收大小
【发布时间】:2019-07-22 18:15:38
【问题描述】:

我正在运行以下 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: {}

服务器:

服务器是 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 时,发生了同样的错误。 是什么导致了这个问题?

【问题讨论】:

    标签: docker apache-kafka


    【解决方案1】:

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

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

    >>> struct.unpack("!I", struct.pack("!4s", "GET ".encode("UTF8")))
    (1195725856,)
    

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

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

    【讨论】:

      【解决方案2】:

      这意味着,接收消息的大小大于套接字服务器可以接受的默认消息大小 ~ 100 MB。

      您需要将server.properties 中的以下配置更改为您想要使用的更大的配置(例如 300 MB):

      socket.request.max.bytes=300000000
      

      【讨论】:

        猜你喜欢
        • 2019-09-15
        • 2019-02-02
        • 1970-01-01
        • 2018-08-28
        • 1970-01-01
        • 2019-11-15
        • 2018-02-08
        • 2019-01-23
        • 2018-10-16
        相关资源
        最近更新 更多