1

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

1 回答 1

6

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

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

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

也许我应该在写所有这些之前先询问你的用例:)

于 2016-02-18T22:04:48.017 回答