Docker Compose部署Kafka后命令行生产者发消息挂起无报错如何解决
问题根因&解决方案
1. 最直接的问题:docker exec 参数缺失
你当前执行生产者命令的docker exec只加了-t(分配伪终端)参数,没有加-i(保持标准输入打开),导致你输入的内容根本没有传递给容器内的控制台生产者程序,自然不会有响应。把命令改成带-it参数即可:
docker exec -it root_kafka_1 bash /kafka/bin/kafka-console-producer.sh --topic test_topic --bootstrap-server kafka:9092
输入消息后按回车就能正常写入,按Ctrl+C可退出生产者程序。
2. 补充配置优化
如果修改参数后仍然有异常,你可以在docker-compose的Kafka环境变量中补充监听器规则,避免部分版本Debezium Kafka镜像默认绑定规则异常:
version: '2' services: zookeeper: image: debezium/zookeeper:1.5 ports: - 2181:2181 - 2888:2888 - 3888:3888 kafka: image: debezium/kafka:1.5 ports: - 9092:9092 links: - zookeeper environment: - ZOOKEEPER_CONNECT=zookeeper:2181 # 新增监听器配置 - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 - ADVERTISED_HOST_NAME=kafka
修改配置后重启容器即可生效。
效果验证
执行生产者命令写入消息后,可以新开终端执行消费者命令验证消息是否写入成功:
docker exec -it root_kafka_1 bash /kafka/bin/kafka-console-consumer.sh --topic test_topic --bootstrap-server kafka:9092 --from-beginning
正常情况下能看到你之前发送的My first event消息。
内容的提问来源于stack exchange,提问作者sharingiscaring
相关产品推荐
相关产品推荐

