Envoyer KafkaProducer partir de la machine locale à hortonworks a sandbox sur virtualbox
J'ai vraiment un simple producteur que je suis en cours d'exécution par le biais de l'éclipse sur ma machine locale windows... Ce que je veux vraiment, c'est de faire passer un message par le biais de kafka, je vais donc être en mesure d'afficher le courtier par l'entremise zookeeper. Juste pour voir comment la communication fonctionne du début à la fin... Donc voilà le code:
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();
Cependant, après un certain temps je reçois
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.
J'ai hortonworks a sandbox de l'installation, avec kafka mais je n'arrive pas à le connecter. J'ai essayé de la redirection de port dans le réseau virtualbox configurations, mais toujours le même problème. Il y a une chose qui me manque?
OriginalL'auteur Mez | 2015-07-17
Vous devez vous connecter pour publier un commentaire.
Vous avez raison de vous ouvrir les ports, sans doute 9092 et 2181 par défaut, si vous êtes aussi essayez de créer/utiliser un Kafka de consommation. Kafka cependant publie son "nom d'hôte" pour les producteurs et les consommateurs à utiliser, ce nom doit résoudre d'où vous vous connectez. VirtualBox/VM nom d'hôte n'est pas car il n'y a pas d'entrée sur la machine qui héberge qui lui dit de résoudre le nom d'hôte et d'aller à localhost dans votre cas, et il n'y a rien qui permet de le résoudre comme un DNS. Vous pouvez modifier votre fichier hosts mais c'est trop intrusif. Longue histoire courte, Kafka reconnaît ce pourrait être une exigence et fournit un paramètre de configuration pour vous de remplacer ce que Kafka raconte le monde sur la façon de l'obtenir pour le courtier. La Config est appelé
advertised.host.name
etadvertised.port
. Sauf si vous décidez de changer le port que vous aurez seulement besoin de définir laadvertised.host.name
.Essayez de définir
advertised.host.name
dans Kafkaserver.properties
fichier de configuration à localhost. Avec cette ouverture des ports devrait faire l'affaire.OriginalL'auteur akizl