You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka Docker部署下连接报错‘Disconnected while requesting ApiVersion’求助

问题:Confluent-Kafka客户端连接Bitnami Kafka容器失败

通过以下docker-compose.yml部署的Kafka Docker环境此前运行正常:

version: '2'

services:
    zookeeper:
        image: bitnami/zookeeper:3.8
        ports:
            - 2181:2181
        environment:
            - ALLOW_ANONYMOUS_LOGIN=yes
            #- ZOO_ENABLE_AUTH=yes
    kafka:
        image: bitnami/kafka:2.5.0
        ports:
            - 9092:9092
            - 9091:9091
        links:
            - zookeeper
        environment:
            - ALLOW_PLAINTEXT_LISTENER=true
            - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
            - KAFKA_LISTENERS=INTERNAL://kafka:9091,EXTERNAL://localhost:9092
            - KAFKA_ADVERTISED_LISTENERS=EXTERNAL://localhost:9092,INTERNAL://kafka:9091
            - KAFKA_INTER_BROKER_LISTENER_NAME=INTERNAL
            - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=EXTERNAL:PLAINTEXT,INTERNAL:PLAINTEXT

尝试使用confluent-kafka客户端连接,生产者代码如下:

from confluent_kafka import Producer
import socket

conf = {'bootstrap.servers': "127.0.0.1:9092",
        "enable.ssl.certificate.verification": False,
        'client.id': socket.gethostname()}

producer = Producer(conf)
producer.produce('my_topic', key="key", value="value")
producer.flush()

运行代码时出现以下错误:

Disconnected while requesting ApiVersion: might be caused by incorrect
security.protocol configuration (connecting to a SSL listener?) or
broker version is < 0.10 (see api.version.request) (after 2ms in state
APIVERSION_QUERY)

注意到以下信息:

  • Kafka broker版本为2.5。
  • docker-compose日志显示:
    ssl.client.auth = none
    ssl.enabled.protocols = [TLSv1.2]

解决建议

  • 指定安全协议为PLAINTEXT:你的Kafka配置中EXTERNAL监听用的是明文协议,但confluent-kafka客户端默认可能尝试SSL连接,导致协议不匹配。在客户端配置里加上'security.protocol': 'PLAINTEXT',修改后的配置如下:
    conf = {'bootstrap.servers': "127.0.0.1:9092",
            "enable.ssl.certificate.verification": False,
            'security.protocol': 'PLAINTEXT',
            'client.id': socket.gethostname()}
    
  • 显式开启API版本请求:虽然Kafka 2.5版本支持API版本请求,但可以在客户端配置中添加'api.version.request': True,确保客户端主动向broker请求版本信息,避免版本兼容问题。
  • 验证Kafka监听状态:查看Kafka容器日志,确认是否有类似Listening for connections on EXTERNAL://localhost:9092 (PLAINTEXT)的日志,确保明文监听端口正常启动。
  • 检查端口映射有效性:在主机上执行netstat -anp | grep 9092(Linux)或netstat -ano | findstr 9092(Windows),确认9092端口确实处于监听状态,没有被其他进程占用。
  • 调整Listener地址(可选):如果上述方法无效,可以尝试将docker-compose中KAFKA_LISTENERS和KAFKA_ADVERTISED_LISTENERS的EXTERNAL地址改为0.0.0.0:9092,确保broker绑定到所有可用网络接口,避免localhost解析问题。

内容的提问来源于stack exchange,提问作者kta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:45:07