将KafkaProducer从本地计算机发送到virtualbox上的hortonworks沙箱

Mez*_*Mez 10 hadoop bigdata apache-kafka hortonworks-data-platform

我有一个非常简单的制作人,我在我的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();
Run Code Online (Sandbox Code Playgroud)

但是过了一段时间我得到了

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.
Run Code Online (Sandbox Code Playgroud)

我有hortonworks沙箱设置,kafka运行,但我似乎无法连接到它.我尝试在虚拟机网络配置中进行端口转发,但仍然存在相同的问题.有什么东西我错过了吗?

小智 9

如果您还尝试创建/使用Kafka消费者,则打开端口是正确的,默认情况下可能是9092和2181.然而,Kafka将其"主机名"广告给生产者和消费者使用,该名称需要从您连接的地方解决.VirtualBox/VM主机名没有,因为托管计算机上没有任何条目告诉它解析主机名并转到你的案例中的localhost,没有任何东西可以像DNS那样帮助解决它.您可以编辑您的主机文件,但这太侵入了.简而言之,Kafka承认这可能是一项要求,并为您提供配置参数,以覆盖Kafka告诉全世界如何到达经纪人的内容.配置称为advertised.host.name和advertised.port.除非你'advertised.host.name

尝试将advertised.host.nameKafka的server.properties配置文件设置为localhost.这与打开端口应该做的伎俩.