2017-07-12 1 views
-1

J'ai créé un sujet dans Kafka avec le nombre de partitions 3 maintenant dans toutes ces trois partitions Je veux pousser des messages uniques. Y a-t-il un moyen de le faire? J'ai vérifié producer.send pousse les messages en double sur toutes les partitions.Comment faire pour pousser les messages uniqe dans différentes partitions d'un sujet

Pour les tests, je suis en utilisant le code suivant:

from kafka import KafkaProducer 
from kafka.errors import KafkaError 

producer = KafkaProducer(bootstrap_servers=['localhost:9092']) 

# Asynchronous by default 
future = producer.send('my-topic', b'raw_bytes') 

Mais il envoie des messages en double sur des partitions.

Répondre

0

Ajoutez une clé à vos messages. Le partitionneur par défaut de Kafka s'assurera que tous les messages avec des clés en double iront à la même partition. Vous pouvez utiliser un hachage md5 de la valeur du message comme clé de message.

+0

Pouvez-vous s'il vous plaît partager un exemple de code pour cela. Ce sera très utile. – Avi

0

De https://kafka-python.readthedocs.io/en/master/apidoc/KafkaProducer.html#kafka.KafkaProducer.send:

future = producer.send(topic='my-topic', value= b'raw_bytes', key=None, partition=None, timestamp_ms=None) 

Vous pouvez affecter manuellement la destination vous partition, bien que cela ne soit pas recommandé, car si vous avez besoin d'élargir votre sujet avec des partitions supplémentaires? Vous ne voulez pas avoir à mettre à jour votre code ...

Ou vous pouvez spécifier des clés personnalisées. Une somme md5 devrait faire une distribution relativement égale, vous pouvez voir comment créer cela dans cette réponse: https://stackoverflow.com/a/5297483/770425