使用wurstmeister/kafka-docker搭建后无法生产消息求助
解决wurstmeister/kafka-docker下生产者无法发送消息的问题
我之前用wurstmeister/kafka-docker搭建Kafka环境时,完完全全碰到过你这个问题!能创建主题但发不了消息,核心原因是Kafka的advertised.listeners配置不对——这个参数是Kafka用来告诉客户端(生产者/消费者)应该连接哪个地址的,默认镜像里这个地址是容器内部的hostname,宿主机上的客户端拿到这个地址后根本连不通容器。
下面是亲测有效的解决步骤:
1. 修改docker-compose.yml配置
打开你的docker-compose.yml文件,给Kafka服务添加以下环境变量配置:
services: kafka: image: wurstmeister/kafka:latest ports: - "9092:9094" # 端口映射对应下方OUTSIDE监听的容器端口 environment: KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9092,OUTSIDE://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT KAFKA_LISTENERS: INSIDE://0.0.0.0:9092,OUTSIDE://0.0.0.0:9094 KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 # 需与你的ZooKeeper服务名对应 depends_on: - zookeeper
配置说明:
KAFKA_ADVERTISED_LISTENERS:声明两个监听地址,INSIDE供容器内部集群通信使用(指向Kafka容器的hostname),OUTSIDE给宿主机客户端使用(指向localhost:9092)KAFKA_LISTENERS:配置Kafka实际监听的端口,INSIDE监听容器内的9092端口,OUTSIDE监听容器内的9094端口,再通过ports映射到宿主机的9092端口KAFKA_INTER_BROKER_LISTENER_NAME:指定集群内部通信用的监听器,这里选择INSIDE即可
2. 重启Kafka容器
先停止当前运行的容器:
docker-compose down
然后重新启动服务:
docker-compose up -d
3. 重新测试生产者
现在再运行你的生产者命令:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
输入消息后应该就能正常发送了!
另外补充个临时应急技巧:如果不想改配置,也可以先查询Kafka容器的IP地址:
docker inspect kafka | grep -A 2 "IPAddress"
然后用容器IP+9092端口来连接生产者,比如:
bin/kafka-console-producer.sh --broker-list 172.17.0.3:9092 --topic test
不过这种方式每次重启容器IP可能会变化,还是修改advertised.listeners的方式更稳定。
内容的提问来源于stack exchange,提问作者Green Fireman
相关产品推荐
相关产品推荐

