如何在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))
答案 0 :(得分:5)
Key决定了消息最终会进入“哪个分区” 如果你不提供密钥,那么Kafka会以循环方式放置消息,每个分区的消息数量大致相同。
如果提供密钥,则Kafka会计算哈希并将消息放入生成的分区中。您无法完全控制将使用哪个特定分区,只是相同的密钥将始终位于同一分区中。
添加消息密钥通常用于保证某些消息子集的排序。例如。假设您有user
和transaction
个实体,并且您希望按顺序处理与同一用户相关的所有交易。您可以使用userId
作为消息密钥来实现此目的。
分区之间没有协调(太慢),因此在使用多个分区时没有总排序。只要将消息全部放在同一个分区中,就可以保证消息的生成顺序与消息的生成顺序相同。
在写完所有内容之前,我可能先问你的用例:)