134 votes

Quel est l'objectif de la messagerie basée sur les paires clé/valeur de Kafka ?

Tous les exemples de Kafka | producteurs montrer le ProducerRecord La paire clé/valeur de l'utilisateur n'est pas seulement de même type (tous les exemples montrent que la paire clé/valeur de l'utilisateur est de même type). <String,String> ), mais le même valeur . Par exemple :

producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));

Mais dans la documentation de Kafka, je n'arrive pas à trouver où le concept de clé/valeur (et son objectif/utilité sous-jacente) est expliqué. Dans la messagerie traditionnelle (ActiveMQ, RabbitMQ, etc.), j'ai toujours envoyé un message à un sujet/une file d'attente/un échange particulier. Mais Kafka est le premier courtier qui semble exiger des paires clé/valeur au lieu d'un simple message de type chaîne.

Alors je demande : Quel est le but et l'utilité de demander aux producteurs d'envoyer des paires de KV ?

0 votes

Conceptuellement, un événement possède une clé, une valeur, un horodatage et des en-têtes de métadonnées facultatives. Voici un exemple d'événement : Clé de l'événement : "Alice" Valeur de l'événement : "A effectué un paiement de 200 $ à Bob" Horodatage de l'événement : "25 juin 2020 à 14 h 06".

124voto

Matthias J. Sax Points 25989

Kafka utilise l'abstraction d'un système distribué. journal qui consiste en partitions . La division d'un journal en partitions permet de faire évoluer le système.

Clés sont utilisés pour déterminer la partition dans un journal à laquelle un message est ajouté. Alors que la valeur est la charge utile réelle du message. Les exemples ne sont pas très "bons" à cet égard ; en général, un type complexe est utilisé comme valeur (comme un type tuple ou un JSON ou similaire) et un champ est extrait comme clé.

Voir : http://kafka.apache.org/intro#intro_topics et http://kafka.apache.org/intro#intro_producers

En général, la clé et/ou la valeur peuvent être null aussi. Si la clé est null une partition aléatoire sera sélectionnée. Si la valeur est null il peut ont une sémantique spéciale de "suppression" dans le cas où vous activez le compactage des journaux au lieu de la politique de rétention des journaux pour un sujet ( http://kafka.apache.org/documentation#compaction ).

3 votes

Et notamment, les clés jouent également un rôle important dans l'API de diffusion en continu de Kafka. KStream et KTable - voir ici .

16 votes

Clés peut pour déterminer la partition, mais c'est juste une stratégie par défaut du producteur. En fin de compte, c'est le producteur qui choisit la partition à utiliser.

0 votes

@gvo La clé a-t-elle d'autres usages ?

32voto

MikeK Points 221

Ajout tardif... Spécifier la clé de façon à ce que tous les messages sur la même clé aillent à la même partition est très important pour le bon ordre de traitement des messages si vous avez plusieurs consommateurs dans un groupe de consommateurs sur un sujet.

Sans clé, deux messages sur la même clé pourraient aller dans des partitions différentes et être traités par différents consommateurs du groupe dans le désordre.

-4voto

Utkarsh Gupta Points 1

Un autre cas d'utilisation intéressant

Nous pourrions utiliser l'attribut key dans les sujets Kafka pour envoyer les user_ids et ensuite brancher un consumer pour récupérer les événements en streaming (événements stockés dans les attributs value). Cela pourrait vous permettre de traiter n'importe quel historique maximal de séquences d'événements utilisateur pour créer des caractéristiques dans vos modèles d'apprentissage automatique.

Je dois encore découvrir si cela est possible ou non. Je continuerai à mettre à jour ma réponse avec plus de détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X