Sobes.tech
Назад к вопросам
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 попадут в одну и ту же партицию.