Исходя из информации, что вы новичок в Kafka, я склонен предположить, что вы непреднамеренно пытаетесь использовать расширенный вариант использования, и это, вероятно, не то, что вы хотите.
Обычный вариант использования - публикация сообщений в теме. Сообщение назначается разделом на основе key
, и все сообщения для одного и того же ключа заканчиваются в одном разделе.
Что касается потребителя, вы подписываетесь на всю тему (без явного запроса на раздел), и Kafka будет распределять разделы между всеми доступными пользователями.
Это дает вам гарантию того, что все сообщения с определенным ключом будут обрабатываться одним и тем же потребителем (все они идут в один и тот же раздел, и только один потребитель обрабатывает каждый раздел) и в том же порядке, в котором они были отправлены.
Если вы действительно хотите выбрать раздел самостоятельно, вы можете написать класс разделителя и настроить его на использование производителем, установив partitioner.class
configuration.
Из документации Кафки
NAME
partitioner.class
DESCRIPTION
Partitioner class that implements the org.apache.kafka.clients.producer.Partitioner interface.
TYPE
class
DEFAULT
org.apache.kafka.clients.producer.internals.DefaultPartitioner
VALID VALUES
IMPORTANCE
medium
Несколько примеров учебных пособий о том, как это сделать, можно найти в Интернете. Вот образец для справки: