如何在主题的不同分区中推送uniqe消息

时间:2017-07-12 06:24:45

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

我已经在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')

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

2 个答案:

答案 0 :(得分:0)

在邮件中添加密钥。 Kafka的默认分区程序将确保具有重复键的所有消息都将转到同一分区。您可以使用消息值的md5哈希作为消息密钥。

答案 1 :(得分:0)

来自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