0

J'ai la configuration du cluster de kafka entre les machines (machines n ° 1 et la machine n ° 2) et la configuration est la suivante:Utilisation de Kafka pour transférer des fichiers entre deux clients

1) Chaque machine est configurée pour avoir un courtier et un zookeeper en cours d'exécution. 2) Les propriétés serveur et zookeeper sont configurées pour avoir un zookeeper à plusieurs courtiers et plusieurs nœuds.

J'ai actuellement la compréhension des KafkaProducer et KafkaConsumer suivants:

1) Si je vous envoie un fichier de machine#1 à machine#2, il est décomposé en lignes en utilisant des délimiteurs par défaut (LF ou \ n). 2) Par conséquent, si la machine n ° 1 publie 2 fichiers différents sur le même sujet, cela ne signifie pas que machine#2 recevra les deux fichiers. Au lieu de cela, chaque ligne sera ajoutée aux partitions du journal des rubriques et un machine#2 le lira à partir des partitions du journal dans l'ordre d'arrivée. à-dire l'ordre ne sont pas les mêmes que

file1-line1 
file1-line2 
end-of-file1 
file2-line1 
file2-line2 
end-of-file2 

mais il pourrait être quelque chose comme: fichier1-line1 fichier2-line1 fichier1-line2 fin de fichier1 fichier2 -line2 fin de -file2

En supposant que ce qui précède est correct (je suis heureux de me tromper), je crois que l'utilisation de Consumer Producer pour transférer des fichiers n'est pas la bonne approche (Probablement connecter API est la solution ici). Puisque le site Web de Kafka indique que «l'agrégation de notation» est un cas d'utilisation très populaire, je me demandais si quelqu'un a des exemples de projets ou un site Web qui montre des exemples d'échange de fichiers en utilisant Kafka.

P.S. Je sais que par définition Connect API dit que c'est pour un échange de données fiable entre kafka et les systèmes «autres» - mais je ne vois pas pourquoi l'autre système ne peut pas avoir kafka. J'espère donc que ma question n'aura pas à se concentrer sur les «autres» systèmes non-kafka.

Répondre

1

Votre compréhension est correcte, cependant si vous voulez le même ordre, vous pouvez utiliser seulement 1 partition pour ce sujet. L'ordre dans lequel la machine n ° 2 est lue sera donc le même que celui que vous avez envoyé. Cependant, cela sera inefficace et manquera de parallélisme pour lequel Kafka est largement utilisé.

Kafka a une garantie de commande au sein d'une partition. citation de la documentation

Kafka ne donne qu'un ordre total sur les enregistrements dans une partition, pas entre les différentes partitions dans un sujet

Pour envoyer toutes les lignes d'un fichier à une seule partition, envoyer une clé supplémentaire au client producteur qui va hacher le message envoyé à la même partition. Cela s'assurera que vous recevez les événements d'un fichier dans le même ordre sur la machine n ° 2. Si vous avez des questions n'hésitez pas à demander, car nous utilisons Kafka pour commander des garanties d'événements générés à partir de sources multiples en production, ce qui est fondamentalement votre cas d'utilisation.

+0

Merci beaucoup pour cela. Je suis en train de travailler sur un PoC qui pourra éventuellement soit transférer des fichiers d'un producteur kafka («machine n ° 1») à d'autres et vice-versa. Donc vous dites que je dois utiliser l'API du connecteur? ou Dois-je utiliser Stream à la place? – ha9u63ar

+0

@ ha9u63ar S'il s'agit d'un transfert bidirectionnel, vous devez exécuter la même instance en tant que producteur et consommateur connecté à un cluster kafka. Vous pouvez également utiliser des connecteurs ou un simple client Producer/Consumer –