Sobes.tech
Junior — Middle
88

Бір тақырыпқа екі тұтынушыны тоқтаусыз жұмыс істеу үшін орнатуға дайынсыз ба, әрқайсысына нақты бөлімдерді көрсетіп?

Сұралған компаниялар
СБЕРСБЕР

AI-дан жауап

sobes.tech AI

Для настройки двух потребителей (consumers) в Java, которые читают из одного топика Kafka и при этом работают без перебоев, можно явно назначить каждой из них конкретные партиции топика. Это называется ручным назначением партиций (manual partition assignment).

Пример с использованием KafkaConsumer:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "my-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

KafkaConsumer<String, String> consumer1 = new KafkaConsumer<>(props);
KafkaConsumer<String, String> consumer2 = new KafkaConsumer<>(props);

// Назначаем конкретные партиции для каждого потребителя
TopicPartition partition0 = new TopicPartition("my-topic", 0);
TopicPartition partition1 = new TopicPartition("my-topic", 1);

consumer1.assign(Collections.singletonList(partition0));
consumer2.assign(Collections.singletonList(partition1));

// Теперь consumer1 читает только из партиции 0, а consumer2 — из партиции 1

Такой подход гарантирует, что каждый потребитель обрабатывает свою партицию, и между ними не будет конфликтов или дублирования сообщений. Важно, чтобы количество потребителей не превышало количество партиций, иначе некоторые потребители останутся без данных.