Skip to main content
 首页 » 编程设计

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

2025年05月04日32bonelee

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

请您参考如下方法:

key 决定了一条消息将在“哪个分区”中结束。
如果您不提供 key ,那么 Kafka 将以循环方式放置消息,其中每个分区获得大致相同数量的消息。

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

分区之间没有协调(太慢),因此在使用多个分区时没有总排序。只有当您将消息全部放在同一分区中时,您才能保证消息将按照它们生成的相同顺序使用。

也许我应该先问你的用例,然后再写这些:)