Mac Docker Desktop下docker compose部署wurstmeister/kafka生产者无法连接
错误成因
wurstmeister/kafka镜像与Confluent官方Kafka镜像的监听器配置逻辑存在差异:
- 你当前配置的
KAFKA_LISTENERS中,外部监听器绑定的地址是localhost:9092,这会导致容器内的Kafka进程仅监听容器内部的回环网卡(lo)的9092端口,不会监听容器对外暴露的物理网卡端口 - 宿主机发送到9092端口的请求虽然能进入容器网络栈,但因为Kafka没有在对应网卡上监听请求,会直接被内核断开连接,所以抛出EOF异常,且Kafka进程侧不会收到请求、没有相关日志输出
解决方案
修改docker-compose.yml中Kafka服务的KAFKA_LISTENERS配置,将外部监听器的绑定地址改为0.0.0.0(表示监听容器内所有网卡),KAFKA_ADVERTISED_LISTENERS保持不变即可,修改后的配置段如下:
kafka: container_name: kafka image: wurstmeister/kafka:2.13-2.7.0 ports: - "9092:9092" environment: KAFKA_LISTENERS: INTERNAL://kafka:19092,EXTERNAL://0.0.0.0:9092 KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:19092,EXTERNAL://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181" KAFKA_BROKER_ID: 1 restart: on-failure depends_on: - zookeeper
修改完成后执行以下命令重启服务生效:
docker compose down -v docker compose up -d
内容的提问来源于stack exchange,提问作者amorfis
相关产品推荐
相关产品推荐

