2017-10-11 8 views
0

J'ai installé et la configuration Kafka utilisant le tutoriel simple producer/consumer suivant:Kafka - configuration simple consommateur/producteur ne fonctionne pas sur des machines différentes, mais fonctionne localement

https://kafka.apache.org/quickstart

Je deux machines, et les deux utilisent Ubuntu.

Reprise du problème:

Si je le producer et consumer sur la même machine, tout fonctionne bien. Si je le producer sur machine 2, et le reste sur machine 1, comme kafka, serveur zookeeper et le consumer, je ne reçois aucun message sur machine 1.

Machine 1 has IP: 192.168.1.100 

Machine 2 has IP: 192.168.1.101 

Exemple de travail en utilisant seulement la machine 1 uniquement, avec 4 console applications

Console 1 - a commencé Zookeeper:

bin/zookeeper-server-start.sh config/zookeeper.properties 

Console 2 - a commencé kafka server

bin/kafka-server-start.sh config/server.properties 

Console 3 créé un sujet test appelé:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 

testé le sujet:

bin/kafka-topics.sh --list --zookeeper localhost:2181 

Commencez le consommateur

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test 

Console 4 - Envoyer des messages:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 

Il fonctionne!

PAS Exemple de travail en utilisant la machine 1 et 2

Machine 1 - Console 1 - a commencé Zookeeper:

bin/zookeeper-server-start.sh config/zookeeper.properties 

Machine 1 - Console 2 - a commencé kafka serveur

bin/kafka-server-start.sh config/server.properties 

Machine 1 - Console 3 créé un sujet appelé test:

bin/kafka-topics.sh --create --zookeeper 192.168.1.100:2181 --replication-factor 1 --partitions 1 --topic test 

testé le sujet:

bin/kafka-topics.sh --list --zookeeper 192.168.1.100:2181 

Commencez le consommateur

bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.100:9092 --topic test 

Machine 2 - Console 1 - Envoyer des messages à kafka sur le IP 192.168.1.100

bin/kafka-console-producer.sh --broker-list 192.168.1.100:9092 --topic test 

ne fonctionne pas ...

Qu'est-ce que je manque ici?

EDIT:

Je l'ai utilisé maintenant kafkacat pour tester la connexion ... voici la sortie.

[email protected]:~/kafka/kafka_2.11-0.11.0.1# kafkacat -b 192.168.1.100 -t test -L 
Metadata for test (from broker -1: 192.168.1.100:9092/bootstrap): 
1 brokers: 
    broker 0 at ubuntu:9092 
1 topics: 
    topic "test" with 1 partitions: 
    partition 0, leader 0, replicas: 0, isrs: 0 
%3|1507802180.807|FAIL|rdkafka#producer-1| [thrd:ubuntu:9092/0]: ubuntu:9092/0: Connect to ipv4#127.0.1.1:9092 failed: Connection refused 
%3|1507802180.807|ERROR|rdkafka#producer-1| [thrd:ubuntu:9092/0]: ubuntu:9092/0: Connect to ipv4#127.0.1.1:9092 failed: Connection refused 

Pourquoi le 127.0.1.1:9092 expliqué ci-dessus? Ne devrait pas être 192.168.1.100:9092?

Répondre

3

De the FAQ, un problème commun est le nom d'hôte:

Lorsqu'un courtier démarre, il enregistre son adresse IP/port ZK. Vous devez vous assurer que l'adresse IP enregistrée est conforme à ce qui est indiqué dans metadata.broker.list dans la configuration du producteur. Par défaut, l'adresse IP enregistrée est donnée par InetAddress.getLocalHost.getHostAddress(). En règle générale, cela devrait retourner l'adresse IP réelle de l'hôte. Cependant, parfois (par exemple, dans EC2), l'adresse IP renvoyée est interne et ne peut pas être connectée de l'extérieur. La solution consiste à définir explicitement l'hôte IP à enregistrer dans ZK en définissant la propriété hostname dans server.properties. Dans un autre cas rare où l'hôte/port de liaison est différent de l'hôte/port pour la connexion client, vous pouvez définir advertised.host.name et advertised.port pour la connexion client.

, ouvrez votre server.properties et changer le hostname:

host.name=<your hostname> 

Si cela ne fonctionne toujours pas, essayez de modifier le advertised.host.name:

advertised.host.name=<your ip> 

Si cela ne fonctionne pas vraiment , jetez un oeil à la advertised.listeners et assurez-vous qu'il est soit 0.0.0.0:port ou <your.ip>:port. Exemple:

advertised.listeners=PLAINTEXT://0.0.0.0:9092 
+0

Merci Derlin. J'ai défini tout cela du côté client, en définissant l'IP/Port du côté serveur (où se trouvent le zookeeper, le serveur kafka et le consommateur). Mais ça n'a pas marché. Cependant, si j'exécute le script qui récupère tous les sujets du serveur, je les vois correctement. La seule chose qui ne fonctionne pas, envoie un message du producteur au consommateur (serveur). Des pensées? – waas1919

+1

quelle commande utilisez-vous? avez-vous un journal? – Derlin

+0

C'est la commande que je veux utiliser: bin/kafka-console-producer.sh --broker-list 192.168.1.100:9092 - test de sujet – waas1919