1

Voici ma configuration sur local: 3 machines virtuelles (en utilisant Virtualbox), kafka et zookeeper installés sur les trois. Ils se parlent tous aussi.Comment me connecter au cluster kafka sur Virtualbox?

J'essaie d'utiliser kafka-console-producer depuis mon local, ce qui nécessite une liste de courtiers. Je fournis les adresses IP de mes machines virtuelles, mais cela ne semble pas fonctionner. J'ai aussi essayé les propriétés advertised.host sur les machines virtuelles mais cela n'a aucun effet pour moi. Voici mes server.properties des trois machines:

Server 1:

broker.id=4 
port=9092 
host.name=10.30.3.4 
advertised.host.name=10.30.3.4 
advertised.port=9092 
zookeeper.connect=10.30.3.4:2181 
zookeeper.connection.timeout.ms=6000 

Server 2:

broker.id=3 
port=9092 
host.name=10.30.3.3 
advertised.host.name=10.30.3.3 
advertised.port=9092 
zookeeper.connect=10.30.3.3:2181 
zookeeper.connection.timeout.ms=6000 

Server 3:

broker.id=2 
port=9092 
host.name=10.30.3.2 
advertised.host.name=10.30.3.2 
advertised.port=9092 
zookeeper.connect=10.30.3.2:2181 
zookeeper.connection.timeout.ms=6000 

Mon VirtualBox a également la redirection de port configuration: enter image description here De même pour deux autres machines aussi les ports ne sont modifiés qu'un peu.

Je suis en mesure de se connecter à ZOOKEEPER très bien, donc:

bin/zkCli.sh -server 127.0.0.1:9999 

est capable de se connecter à Zookeeper sur VM. Mais si j'essayez de vous connecter kafka-console-producteur échoue lorsque je tente l'envoi de messages:

bin/kafka-console-producer.sh --broker-list 127.0.0.1:9502 --topic partition2replica2 --timeout 3000 

conduit à:

[2016-02-17 15:06:36,943] WARN Property topic is not valid (kafka.utils.VerifiableProperties) 
hi 
there 
[2016-02-17 15:07:23,699] WARN Failed to send producer request with correlation id 3 to broker 3 with data for partitions [partition2replica2,1] (kafka.producer.async.DefaultEventHandler) 
java.nio.channels.ClosedChannelException 
    at kafka.network.BlockingChannel.send(BlockingChannel.scala:100) 
    at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:73) 
    at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:72) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SyncProducer.scala:103) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply(SyncProducer.scala:103) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply(SyncProducer.scala:103) 
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply$mcV$sp(SyncProducer.scala:102) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply(SyncProducer.scala:102) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply(SyncProducer.scala:102) 
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) 
    at kafka.producer.SyncProducer.send(SyncProducer.scala:101) 
    at kafka.producer.async.DefaultEventHandler.kafka$producer$async$DefaultEventHandler$$send(DefaultEventHandler.scala:255) 
    at kafka.producer.async.DefaultEventHandler$$anonfun$dispatchSerializedData$2.apply(DefaultEventHandler.scala:106) 
    at kafka.producer.async.DefaultEventHandler$$anonfun$dispatchSerializedData$2.apply(DefaultEventHandler.scala:100) 
    at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772) 
    at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:98) 
    at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:98) 
    at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:226) 
    at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:39) 
    at scala.collection.mutable.HashMap.foreach(HashMap.scala:98) 
    at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771) 
    at kafka.producer.async.DefaultEventHandler.dispatchSerializedData(DefaultEventHandler.scala:100) 
    at kafka.producer.async.DefaultEventHandler.handle(DefaultEventHandler.scala:72) 
    at kafka.producer.async.ProducerSendThread.tryToHandle(ProducerSendThread.scala:105) 
    at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:88) 
    at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:68) 
    at scala.collection.immutable.Stream.foreach(Stream.scala:547) 
    at kafka.producer.async.ProducerSendThread.processEvents(ProducerSendThread.scala:67) 
    at kafka.producer.async.ProducerSendThread.run(ProducerSendThread.scala:45) 
[2016-02-17 15:07:25,318] WARN Failed to send producer request with correlation id 7 to broker 3 with data for partitions [partition2replica2,1] (kafka.producer.async.DefaultEventHandler) 
java.nio.channels.ClosedChannelException 
    at kafka.network.BlockingChannel.send(BlockingChannel.scala:100) 
    at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:73) 
    at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:72) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SyncProducer.scala:103) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply(SyncProducer.scala:103) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply(SyncProducer.scala:103) 
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply$mcV$sp(SyncProducer.scala:102) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply(SyncProducer.scala:102) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply(SyncProducer.scala:102) 
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) 
    at kafka.producer.SyncProducer.send(SyncProducer.scala:101) 
    at kafka.producer.async.DefaultEventHandler.kafka$producer$async 

Je ne sais pas ce que je fais mal ici? Des idées? (Je peux fournir la sortie ifconfig si quelqu'un le veut). Toute aide serait appréciée.

[Modifier 1]: Ajout de la sortie du quorum de Zookeeper:

That seems to be in quorum: 
echo stat| nc 10.30.3.2 2181 
Received: 81 
Sent: 80 
Connections: 1 
Outstanding: 0 
Mode: follower 
Node count: 149 

echo stat| nc 10.30.3.3 2181 
Received: 660 
Sent: 664 
Connections: 1 
Outstanding: 0 
Zxid: 0x600000109 
Mode: leader 
Node count: 149 

echo stat| nc 10.30.3.4 2181 
Received: 293 
Sent: 295 
Connections: 1 
Outstanding: 0 
Zxid: 0x600000109 
Mode: follower 
Node count: 149 

Répondre

0

Pour autant que je peux comprendre votre configuration, les zookeepers sur chaque nœud doit également Quorum entre eux pour soutenir les 3 serveurs kafka instances en tant qu'un cluster. Vous avez fourni kafka config seulement, donc je ne peux pas faire si elles sont configurées de cette façon.

Vous pouvez vérifier en utilisant la commande de 4 lettres sur chaque nœud de Zookeeper comme ci-dessous

echo stat | nc <zk ip> <zk port> 
echo mntr | nc <zk ip> <zk port> 

Il faut être un « leader » et deux autres devraient être « suiveurs ».

Je ne suis pas sûr qu'ils fonctionneront comme prévu s'ils ne sont pas configurés pour être en quorum.

+0

Juste ajouté la sortie de ces commandes dans la question principale aussi. Je pense que le problème peut avoir quelque chose à voir avec le port annoncé sur kafka et comment y accéder en utilisant VM. J'ai réussi à me connecter à zookeeper sur VM depuis local après avoir configuré la redirection de port simple (comme je l'ai mentionné dans le post original). –

+0

J'ai compris. Je ne suis pas sûr si le problème est dû à Kafka ou la configuration de transfert de port sur VirtualBox; si je comprends bien, le client recevra l'adresse IP et le port sous advertised.host.name et advertised.port qui est en fait 10.30.3.X/9092. Maintenant, ceux-ci sont différents lorsque vous essayez de vous connecter à partir de l'hôte. Une correction pourrait être nécessaire dans les règles d'acheminement de port et les changements appropriés dans les options de publicité. *. Pouvez-vous essayer d'utiliser l'HOSTIP/PORT dans la publicité.héberger et faire de la publicité.port et tester? – Mehul

+0

J'ai donc essayé d'ajouter 10.30.3. * Ou 10.0.2.15 à la fois dans les règles de transfert et j'ai essayé les deux avec 127.0.0.9502, ça ne marche pas. Désolé pour le 127.0.0.1:5656 dans la liste des courtiers, j'ai créé un tunnel d'ici à tout ce que j'ai utilisé dans la redirection de port à ce moment-là - qui n'a pas fonctionné :( –