Встречается на 2% собеседований по Java
Как сделать так, чтобы Consumer получил сообщения в порядке, в котором их отправляют в Kafka
Для гарантированного порядка доставки сообщений в Kafka Consumer нужно:
-
Один партишн на топик - сообщения в пределах одного партишна всегда сохраняют порядок. Но это ограничивает масштабируемость.
-
Ключ сообщения - при использовании одного ключа все сообщения с этим ключом попадут в один партишн:
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** - идемпотентность продюсера для исключения дубликатов.
Важно: для разных ключей порядок не гарантируется, обработка должна быть однопоточной.
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы