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

inn6fuwd  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(291)

怎么可能呢 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))
j9per5c4

j9per5c41#

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

相关问题