Sobes.tech
Junior — Middle

Ben je klaar om twee consumenten voor één topic zo in te stellen dat ze zonder onderbrekingen werken, door specifieke partities voor elk van hen aan te wijzen?

sobes.tech AI

Antwoord van 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

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