2016-02-18 3 views
1

Comment est-il possible dans pykafka de publier un message sur une partition spécifique d'un sujet. Dans le morceau de code suivant, le sujet de test a quatre partitions et j'ai l'intention d'écrire chaque message dans l'un d'entre eux, mais apparemment, cela ne fonctionne pas de cette façon.Publication sur une partition spécifique d'un sujet à l'aide de pykafka

from pykafka import KafkaClient 

import logging 
logging.basicConfig() 

client = KafkaClient(hosts='localhost:9092') 
print client.topics 
topic = client.topics['test'] 
with topic.get_producer() as producer: 
     for i in range(4): 
       producer.produce('another test message ' + str(i ** 2), partition_key='{}'.format(0)) 

Répondre

4

Key est ce qui détermine « la partition » un message va se retrouver dans.
Si vous ne fournissez pas une clé, puis Kafka place les messages dans un round-robin, où chaque partition obtient à peu près le même nombre de messages.

Si vous fournissez la clé, Kafka calcule le hachage et place le message dans une partition résultante. Vous n'avez pas exactement le contrôle sur quelle partition particulière va être utilisée, mais seulement que la même clé finira toujours dans la même partition.
L'ajout d'une clé au message est souvent utilisé pour garantir la commande de certains sous-ensembles de messages. Par exemple. Disons que vous avez user et transaction entités et que vous souhaitez traiter toutes les transactions qui appartiennent au même utilisateur dans l'ordre. Vous obtiendrez cela en utilisant userId comme clé de message.

Il n'y a pas de coordination entre les partitions (trop lent), donc pas de classement total lorsque plusieurs partitions sont utilisées. Vous avez la garantie que les messages seront consommés dans le même ordre qu'ils ont été produits uniquement si vous les placez tous dans la même partition.

Peut-être que j'aurais dû vous demander d'abord votre cas d'utilisation, avant d'écrire tout ceci :)