4

J'ai des problèmes de connexion de mon hôte (Windows) à Guest (Linux) où j'ai installé Kafka.Connectez-vous à Kafka à l'intérieur de VirtualBox

J'ai configuré une VM (avec VirtualBox) où j'ai installé les outils Confluent. Dans cette machine virtuelle, je lance la commande:

confluent start schema-registry 

Il commence Zookeeper, kafka et schéma registre.

En vertu de cette machine virtuelle, je peux courir

kafka-console-producer --broker-list localhost:9092 --topic test 

et

kafka-console-consumer --bootstrap-server localhost:9092 --topic test 

et tout fonctionne bien, je peux produire et recevoir des messages.

Mon but est cependant d'être en mesure de produire et de consommer des messages de mon hôte, donc je configurer cette règle de redirection de port: port forwarding rule

De mon Windows, je me attendais à cette commande au travail:

bin\windows\kafka-console-producer.bat --broker-list 127.0.0.1:9092 --topic test 

mais tout ce que je reçois est ceci:

ERROR Error when sending message to topic test with key: null, value: 3 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback) 
org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for test-0: 1529 ms has passed since batch creation plus linger time 

J'ai essayé beaucoup de choses différentes mais ne peut pas trouver une solution .... une y des idées?

Répondre

3

Il semble y avoir un espace entre les noms d'hôte et d'hôte. Quel nom d'hôte l'invité Linux a-t-il? Lorsque le producteur/consommateur accède au courtier Kafka, le courtier Kafka renvoie son nom d'hôte pour le producteur de données ou le consommateur aux paramètres par défaut. Les producteurs/consommateurs doivent donc résoudre le nom d'hôte du courtier en IPAddress.

Pour que le courtier renvoie un nom d'hôte arbitraire, utilisez les paramètres advertised.listeners. Les détails sont en the "advertised.listeners" configuration docs.

+0

Merci beaucoup pour votre aide, je me sens vraiment perdu ici. Le nom d'hôte de l'invité Linux est kafka-VirtualBox. Dans les advertised.listeners, j'ai maintenant ceci: advertised.listeners = texte brut: // kafka-VirtualBox: 9092 Et dans l'hôte Windows, j'ai ajouté cette ligne au fichier d'hôtes: 127.0.0.1 kafka -VirtualBox J'ai toujours la même erreur que .... – Florian

+0

Hmm ... Ensuite, il doit résoudre étape par étape. Tout d'abord, confirmez "Est-ce que les commandes kafka permettent d'accéder à kafka-VirtualBox?" par kafka-topics.bat. – kimutansk

+0

J'ai posté sur le chemin. Ensuite, il doit être résolu étape par étape. Tout d'abord, confirmez "Est-ce que les commandes kafka permettent d'accéder à kafka-VirtualBox?" par kafka-broker-api-versions.bat. Si les commandes ne peuvent pas accéder à kafka-VirtualBox, ce problème est un problème de paramètres réseau de boîte virtuelle. Si les commandes peuvent accéder à kafka-VirtualBox, ce problème devient un problème de kafka broker ou client. – kimutansk

0

J'essayais de mettre en place quelque chose de similaire. Bien qu'il soit probablement préférable de mettre en place de bons réseaux virtuels pour Kafka et Zookeeper, j'ai poussé et j'ai voulu partager mon approche personnelle.

J'ai des choses à faire avec Kafka et Zookeeper fonctionnant sur l'invité Linux VirtualBox lui-même, ainsi qu'une solution docker fonctionnant sur cet invité Linux. Voici la docker-compose.yml je l'intérieur de l'invité:

version: '3' 

services: 

    zookeeper: 
    image: "wurstmeister/zookeeper" 
    ports: 
     - "2181:2181" 

    kafka: 
    image: "wurstmeister/kafka" 
    ports: 
     - "9092:9092" 
    environment: 
     KAFKA_ADVERTISED_HOST_NAME: "localhost" 
     KAFKA_CREATE_TOPICS: "test:1:1" 
     KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 

Le point crucial ici est le KAFKA_ADVERTISED_HOST_NAME, qui fait un petit truc sale qui joue bien avec la valeur par défaut en réseau basé sur NAT VirtualBox (en supposant que vous avez patché 2181 et 9092 à travers comme OP l'a fait). Avec cette astuce tout consommateur ou producteur sur le VirtualBox OS OS apprendra de Kafka qu'il est situé sur "localhost", qui résout à l'hôte , mais parce que le port sur l'hôte est corrigé à l'invité les choses finissent dans le bon endroit.La meilleure façon de faire la même chose dans 1.x est d'utiliser les propriétés Auditeurs annoncés, mais le principe reste le même.


Pour référence, voici mes paramètres de VirtualBox:

port 9092 and 2181 forwarded

Avec ces paramètres, après docker-compose up sur le système d'exploitation invité, je pourrais énumérer/créer des sujets et à consommer/produire des messages de l'hôte OS .