2016-02-18 3 views
1

Как можно в pykafka опубликовать сообщение о конкретном разделе темы. В следующем разделе теста кода есть четыре раздела, и я собираюсь написать каждое сообщение в одном из них, но, видимо, он не работает таким образом.Публикация определенного раздела темы с использованием 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)) 

ответ

4

Ключ определяет, что «какой раздел» сообщение будет в конечном итоге в.
Если вы не предоставите ключ, то Кафка ставит сообщения в циклическом режиме, где каждый раздел получает примерно столько же сообщений.

Если вы предоставите ключ, Kafka вычисляет хэш и помещает сообщение в результирующий раздел. Вы точно не контролируете, какой конкретный раздел будет использоваться, только то, что один и тот же ключ всегда будет в одном разделе.
Добавление ключа к сообщению часто используется для обеспечения заказа некоторых подмножеств сообщений. Например. предположим, что у вас есть user и transaction объектов, и вы хотите обрабатывать все транзакции, относящиеся к одному и тому же пользователю по порядку. Вы достигнете этого, используя userId в качестве ключа сообщения.

Отсутствует координация между разделами (слишком медленно), поэтому нет общего порядка при использовании нескольких разделов. Вам гарантировано, что сообщения будут потребляться в том же порядке, в каком они были созданы, только если вы разместите их все в одном разделе.

Возможно, я должен был сначала спросить вас о вашем прецеденте, прежде чем писать все это :)