【问题标题】:Publishing on a specific partition of a topic using pykafka使用 pykafka 在主题的特定分区上发布
【发布时间】:2016-05-30 13:44:46
【问题描述】:

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))

【问题讨论】:

    标签: python apache-kafka producer kafka-python message-bus


    【解决方案1】:

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

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

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

    也许我应该在写这一切之前先询问你的用例:)

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2021-10-31
      • 2016-09-23
      • 1970-01-01
      相关资源
      最近更新 更多