在 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 作为消息键来实现。
分区之间没有协调(太慢),因此在使用多个分区时没有总排序。只有当您将消息全部放在同一分区中时,您才能保证消息将按照它们生成的相同顺序使用。
也许我应该先问你的用例,然后再写这些:)
