鍍金池/ 問答/人工智能  Java  Linux/ 在宿主主機中使用java編程發(fā)消息給docker中的kafka,已經(jīng)做了端口映射

在宿主主機中使用java編程發(fā)消息給docker中的kafka,已經(jīng)做了端口映射,可是docker中的kafka收不到消息

如下圖,在docker中啟動了kafka和zookeeper的服務,并且做了端口映射,
分別9192->9092 2281->2181
clipboard.png

生產(chǎn)者:
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中使用命令啟動一個生產(chǎn)者和消費者可以正常工作。

但是在宿主主機中,使用java編程創(chuàng)建一個生產(chǎn)者,代碼如下:

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中創(chuàng)建的那個消費者也無法收到消息。

clipboard.png

clipboard.png

回答
編輯回答
命于你

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

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

2017年2月18日 09:40
編輯回答
離觴

首先你要清楚docker容器網(wǎng)絡機制,可以去補一補,下面說答案:
在啟動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
2017年3月21日 14:21