将kafkaproducer从本地计算机发送到virtualbox上的hortonworks沙盒

wqsoz72f  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(282)

我有一个非常简单的生产者,我正在我的windows本地计算机上运行eclipse。。。我真正想要的是通过Kafka得到一个消息,这样我就可以通过zookeeper查看代理了。只是想看看沟通是如何进行的。。。代码是这样的:

Properties props = new Properties();
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9020");
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());

    KafkaProducer<String,String> producer = new KafkaProducer<String,String>(props);

    boolean sync = true;
    String topic="mytopic";
    String key = "mykey";
    String value = "myvalue";

    ProducerRecord<String,String> producerRecord = new ProducerRecord<String,String>(topic, key, value);

    if (sync) {
        producer.send(producerRecord).get();
    } else {
        producer.send(producerRecord);
    }

    producer.close();

但是过了一段时间我

Exception in thread "main" java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
at org.apache.kafka.clients.producer.KafkaProducer$FutureFailure.<init>(KafkaProducer.java:437)
at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:352)
at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:248)
at kafkaProducer.TestProducer.main(TestProducer.java:30)  Caused by: org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.

我有hortonworks沙盒设置,与Kafka运行,但我似乎无法连接到它。我尝试在virtualbox网络配置中进行端口转发,但仍然存在相同的问题。有什么我不知道的吗?

isr3a4wc

isr3a4wc1#

如果您还试图创建/使用kafka消费者,那么您打开端口的操作是正确的,默认情况下可能是9092和2181。然而,Kafka将它的“主机名”广告给生产者和消费者使用,这个名称需要从你连接的地方解析出来。virtualbox/vm主机名不存在,因为主机上没有任何条目告诉它解析主机名并转到localhost(在您的情况下),而且没有任何东西像dns那样有助于解析主机名。你可以编辑你的主机文件,但那太麻烦了。长话短说,kafka承认这可能是一个要求,并为您提供了一个配置参数来覆盖kafka告诉世界的关于如何到达代理的内容。已调用配置 advertised.host.name 以及 advertised.port . 除非更改端口,否则只需设置 advertised.host.name .
尝试设置 advertised.host.name 在Kafka的 server.properties 配置文件到localhost。这和打开端口应该可以达到目的。

相关问题