Junior — Middle
94
Bist du bereit, zwei Verbraucher für ein Thema so einzurichten, dass sie ohne Unterbrechung arbeiten, indem du konkrete Partitionen für jeden von ihnen angibst?
Unternehmen wurden gefragt
Antwort von AI
sobes.tech KI
Для настройки двух потребителей (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
Такой подход гарантирует, что каждый потребитель обрабатывает свою партицию, и между ними не будет конфликтов или дублирования сообщений. Важно, чтобы количество потребителей не превышало количество партиций, иначе некоторые потребители останутся без данных.