Как пихать уникальные сообщения в разные разделы темы
Я создал тему в 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 ответа
Добавьте ключ к своим сообщениям. Разделитель по умолчанию Kafka гарантирует, что все сообщения с дублирующимися ключами попадут в один и тот же раздел. Вы можете использовать md5-хэш значения сообщения в качестве ключа сообщения.
С https://kafka-python.readthedocs.io/en/master/apidoc/KafkaProducer.html:
future = producer.send(topic='my-topic', value= b'raw_bytes', key=None, partition=None, timestamp_ms=None)
Таким образом, вы можете вручную назначить целевой раздел самостоятельно, хотя это не рекомендуется, потому что, если вам нужно расширить свою тему дополнительными разделами? Вы не хотите обновлять свой код...
Или вы можете указать пользовательские ключи. Сумма md5 должна составлять для относительно равного распределения, вы можете увидеть, как создать это в этом ответе: /questions/39658419/kak-poluchit-summu-md5-stroki-s-pomoschyu-python/39658435#39658435