Назад к вопросам
СБЕР
Middle
1
У нас есть Topic с 4 партициями. Как заставить продюсера писать сообщения одного пользователя только в одну партицию?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Чтобы продюсер Kafka писал сообщения одного пользователя только в одну партицию, нужно использовать ключ (key) при отправке сообщений. Kafka использует ключ для определения партиции через хеш-функцию, поэтому одинаковый ключ всегда попадёт в одну и ту же партицию.
Пример на Python с использованием библиотеки kafka-python:
from kafka import KafkaProducer
import json
producer = KafkaProducer(bootstrap_servers='localhost:9092',
value_serializer=lambda v: json.dumps(v).encode('utf-8'))
user_id = 'user123'
message = {'event': 'login', 'user': user_id}
# Отправляем сообщение с ключом user_id, чтобы все сообщения этого пользователя шли в одну партицию
producer.send('topic_name', key=user_id.encode('utf-8'), value=message)
producer.flush()
Таким образом, все сообщения с одинаковым ключом user_id попадут в одну и ту же партицию.