怎么可能呢 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条答案
按热度按时间j9per5c41#
关键是什么决定了一条消息将在哪个分区中结束。
如果不提供密钥,则kafka以循环方式放置消息,每个分区获得的消息量大致相同。
如果您提供了密钥,那么kafka计算散列并将消息放入结果分区中。您不能完全控制将要使用哪个特定分区,只是同一个键将总是在同一个分区中结束。
向消息添加密钥通常用于保证消息的某些子集的顺序。e、 假设你有
user
以及transaction
实体,您希望按顺序处理属于同一用户的所有事务。你可以通过使用userId
作为消息键。分区之间没有协调(太慢),因此在使用多个分区时没有总的顺序。只有将消息全部放在同一分区中,才能保证消息的使用顺序与生成的顺序相同。
也许我应该在写这篇文章之前,先向您询问您的用例:)