我已经在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')
但它正在分区上发送重复的消息。
答案 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