web-dev-qa-db-fra.com

Comment obtenir un message par clé à partir de kafka topic

J'essaie de recevoir un message par clé de kafka. J'ai trouvé qu'une seule solution est d'utiliser StateStore mais je pense que ce n'est pas une bonne idée. Comment obtenir un message par clé à partir de la rubrique kafka? Est-ce une bonne idée d'utiliser StateStore pour cette opération?

7

Chaque enregistrement écrit dans Kafka peut éventuellement avoir une clé (mais ce n'est pas obligatoire!), La clé est accessible de plusieurs façons:

Consommateur de la console:

$ kafka-console-consumer --bootstrap-server <servername>:9092 --topic topicname --from-beginning --property print.key=true --property key.separator=:

kafkacat :

$ kafkacat -b <servername>:9092 -C -t topicname -o beginning -K :

Java Consumer API :

ConsumerRecord#key()

Kafka n'est cependant pas indexé par clé, il est indexé par décalage, et éventuellement par horodatage . Si vous devez rechercher une clé, vous devrez matérialiser les données dans un système conçu pour rechercher par clé: base de données relationnelle, magasin de valeurs de clé ou un index. Vous pouvez le faire assez facilement avec Kafka Connect, ou si vous souhaitez l'intégrer à votre service, vous pouvez utiliser la fonction requêtes interactives de Kafka Streams .

3
Chris Matta

Vous ne pouvez pas "recevoir des messages par clé de Kafka".

Une solution, si possible, serait d'avoir autant de partitions que de clés et de toujours router les messages d'une clé vers la même partition.

2
Gary Russell