我有一个非常简单的生产者,我正在我的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网络配置中进行端口转发,但仍然存在相同的问题。有什么我不知道的吗?
1条答案
按热度按时间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。这和打开端口应该可以达到目的。