使用pykafka在主题的特定分区上发布

时间:2016-02-18 11:50:36

标签: python apache-kafka producer kafka-python message-bus

如何在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))

1 个答案:

答案 0 :(得分:5)

Key决定了消息最终会进入“哪个分区” 如果你不提供密钥,那么Kafka会以循环方式放置消息,每个分区的消息数量大致相同。

如果提供密钥,则Kafka会计算哈希并将消息放入生成的分区中。您无法完全控制将使用哪个特定分区,只是相同的密钥将始终位于同一分区中。
添加消息密钥通常用于保证某些消息子集的排序。例如。假设您有usertransaction个实体,并且您希望按顺序处理与同一用户相关的所有交易。您可以使用userId作为消息密钥来实现此目的。

分区之间没有协调(太慢),因此在使用多个分区时没有总排序。只要将消息全部放在同一个分区中,就可以保证消息的生成顺序与消息的生成顺序相同。

在写完所有内容之前,我可能先问你的用例:)