web-dev-qa-db-fra.com

Quel est le but de la messagerie basée sur les paires clé / valeur de Kafka?

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

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

Mais dans les Kafka docs, je n'arrive pas à trouver où est expliqué le concept clé/valeur (et son objectif/utilitaire sous-jacent). Dans la messagerie traditionnelle (ActiveMQ, RabbitMQ, etc.) J'ai toujours envoyé un message sur un sujet/une file d'attente/un échange particulier, mais Kafka est le premier courtier qui semble nécessiter des paires clé/valeur au lieu d'un simple message à chaîne régulier.

Je pose donc la question suivante: Quel est le but/l'utilité d'obliger les producteurs à envoyer des paires de KV?

53
smeeb

Kafka utilise l'abstraction d'un journal distribué composé de partitions . Le fractionnement d'un journal en partitions permet de faire évoluer le système.

Les clés permettent de 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 en réalité pas très "bons" à cet égard; vous aurez généralement un type complexe comme valeur (comme un type de tuple ou un JSON ou similaire) et vous extrayerez un champ 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. Si la clé est null, une partition aléatoire sera sélectionnée. Si la valeur est null il peut avoir une sémantique spéciale "supprimer" si vous activez la compression de journal au lieu de la stratégie de conservation de journal pour un sujet ( http://kafka.Apache.org/documentation#compaction ).

59
Matthias J. Sax