Встречается на 2% собеседований по Java

Как сделать так, чтобы Consumer получил сообщения в порядке, в котором их отправляют в Kafka

Для гарантированного порядка доставки сообщений в Kafka Consumer нужно:

  1. Один партишн на топик - сообщения в пределах одного партишна всегда сохраняют порядок. Но это ограничивает масштабируемость.

  2. Ключ сообщения - при использовании одного ключа все сообщения с этим ключом попадут в один партишн:

java
// Producer
producer.send(new ProducerRecord<>("topic", "sameKey", "message"));

// Consumer с одним потоком
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("topic"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
// Обработка в порядке получения
}
}

text

3. **max.in.flight.requests.per.connection=1** - для продюсера, чтобы избежать переупорядочивания при ретраях.

4. **enable.idempotence=true** - идемпотентность продюсера для исключения дубликатов.

Важно: для разных ключей порядок не гарантируется, обработка должна быть однопоточной.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы