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