在宿主主机中使用java编程发消息给docker中的kafka,已经做了端口映射,可是docker中的kafka收不到消息

如下图,在docker中启动了kafka和zookeeper的服务,并且做了端口映射,
分别9192->9092 2281->2181
clipboard.png

生产者:
kafka-console-producer.sh --broker-list localhost:9092 --topic t01

消费者:
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic t01 --from-beginning

clipboard.png

clipboard.png

在docker中使用命令启动一个生产者和消费者可以正常工作。

但是在宿主主机中,使用java编程创建一个生产者,代码如下:

public class demo {
    public static void main(String[] args) {
        Properties conf = new Properties();
        conf.put("zookeeper.connect", "localhost:2281");
        conf.put("bootstrap.servers", "localhost:9192");
        conf.put("serializer.class", StringEncoder.class.getName());
        conf.put("key.serializer", StringSerializer.class.getName());
        conf.put("value.serializer", StringSerializer.class.getName());
        conf.put("acks", "all");
        KafkaProducer<String, String> kp = new KafkaProducer(conf);
        kp.send(new ProducerRecord<String, String>("t01", "he--h22"));
        kp.close();
    }
}

运行代码,没报错,但是在docker中创建的那个消费者也无法收到消息。

clipboard.png

clipboard.png

阅读 5.7k
2 个回答

kafka-console-consumer.sh --bootstrap-server localhost:2181 --topic topic01 --from-beginning

--bootstrap-server localhost:2181 改成Kafka的端口

首先你要清楚docker容器网络机制,可以去补一补,下面说答案:
在启动kafka时先看一下宿主机器的ip,使用命令ipconfig查看,
再运行zookeeper

docker run -d --name zookeeper -p 2181:2181 zookeeper:latest

再运行kafka

docker run -d \
--name kafka \
-p 9092:9092 \
--link zookeeper \
--env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
--env KAFKA_ADVERTISED_HOST_NAME=这里填写ipconfig查看到的宿主ip \
--env KAFKA_ADVERTISED_PORT=9092 \
wurstmeister/kafka:latest
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题