Hadoop 将KafkaProducer从本地计算机发送到virtualbox上的hortonworks沙箱
我有一个非常简单的生产者,我正在我的windows本地机器上运行eclipse。。。我真正想要的是通过kafka获得一条消息,这样我就可以通过zookeeper查看代理。只是想看看沟通是如何进行的。。。下面是代码:Hadoop 将KafkaProducer从本地计算机发送到virtualbox上的hortonworks沙箱,hadoop,bigdata,apache-kafka,hortonworks-data-platform,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.VAL
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();
Properties=newproperties();
put(ProducerConfig.BOOTSTRAP\u SERVERS\u CONFIG,“localhost:9020”);
put(ProducerConfig.VALUE\u SERIALIZER\u CLASS\u CONFIG,StringSerializer.CLASS.getName());
put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,StringSerializer.CLASS.getName());
卡夫卡制作人=新卡夫卡制作人(道具);
布尔同步=真;
字符串topic=“mytopic”;
String key=“mykey”;
String value=“myvalue”;
ProducerRecord ProducerRecord=新的ProducerRecord(主题、键、值);
如果(同步){
producer.send(producerRecord.get();
}否则{
生产商发送(生产商记录);
}
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.
线程“main”java.util.concurrent.ExecutionException中的异常:org.apache.kafka.common.errors.TimeoutException:在60000毫秒后更新元数据失败。
位于org.apache.kafka.clients.producer.KafkaProducer$futurefilure(KafkaProducer.java:437)
位于org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:352)
位于org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:248)
在kafkaProducer.TestProducer.main(TestProducer.java:30)上,由于以下原因导致:org.apache.kafka.common.errors.TimeoutException:未能在60000毫秒后更新元数据。
我有hortonworks沙盒设置,kafka正在运行,但我似乎无法连接到它。我尝试在virtualbox网络配置中进行端口转发,但仍然存在相同的问题。有什么我遗漏的吗?如果您还试图创建/使用卡夫卡消费者,那么打开端口(默认情况下可能是9092和2181)是正确的。然而,卡夫卡向制作人和消费者宣传其“主机名”以供使用,该名称需要从您连接的位置解析。VirtualBox/VM主机名不存在,因为在您的情况下,主机上没有任何条目告诉它解析主机名并转到localhost,并且没有任何东西像DNS那样有助于解析主机名。你可以编辑你的主机文件,但那太麻烦了。长话短说,Kafka承认这可能是一项要求,并为您提供了一个配置参数,以覆盖Kafka告诉世界如何访问代理的内容。配置被称为
advised.host.name
和advised.port
。除非更改端口,否则只需设置播发的.host.name
尝试将Kafka的server.properties
配置文件中的advised.host.name
设置为localhost。这与打开端口一起应该可以达到目的