【问题标题】:How to push uniqe messages in different partitions of a topic如何在主题的不同分区中推送唯一消息
【发布时间】:2017-12-16 10:09:55
【问题描述】:

我已经在 Kafka 中创建了一个分区计数为 3 的主题,现在我想在所有这三个分区中推送唯一消息。有什么办法吗? 我检查了producer.send 在所有分区上推送重复消息。

为了测试,我使用以下代码:

from kafka import KafkaProducer
from kafka.errors import KafkaError

producer = KafkaProducer(bootstrap_servers=['localhost:9092'])

# Asynchronous by default
future = producer.send('my-topic', b'raw_bytes')

但它在分区上发送重复消息。

【问题讨论】:

    标签: python apache-kafka kafka-producer-api kafka-python


    【解决方案1】:

    为您的消息添加密钥。 Kafka 的默认分区器将确保所有具有重复键的消息都将进入同一个分区。您可以使用消息值的 md5 哈希作为消息键。

    【讨论】:

    • 您能否分享一个示例代码。这将非常有帮助。
    【解决方案2】:

    来自https://kafka-python.readthedocs.io/en/master/apidoc/KafkaProducer.html#kafka.KafkaProducer.send

    future = producer.send(topic='my-topic', value= b'raw_bytes', key=None, partition=None, timestamp_ms=None)
    

    因此您可以自己手动分配目标分区,但不建议这样做,因为如果您需要使用其他分区扩展主题怎么办?您不想更新您的代码...

    或者您可以指定自定义键。一个 md5 总和应该是一个相对平等的分布,你可以在这个答案中看到如何创建它:https://stackoverflow.com/a/5297483/770425

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 2021-01-21
      相关资源
      最近更新 更多