Проверяет понимание механизма обработки недоставленных сообщений в Kafka и умение настраивать Dead Letter Queue для отказоустойчивой архитектуры.
Dead Letter Queue (DLQ) — это механизм, который используется для изоляции сообщений, которые не могут быть обработаны корректно даже после повторных попыток. В Kafka DLQ реализуется как отдельный топик, в который consumer отправляет проблемные записи. Это помогает сохранить целостность основного потока данных и дает возможность позже разобрать ошибки.
Обычно consumer обрабатывает сообщение, и если возникает исключение, он может повторить попытку несколько раз (например, с задержкой). Если после всех ретраев сообщение все еще не обработано, оно публикуется в DLQ-топик. Основной топик продолжает работать, а проблемные сообщения не блокируют обработку остальных.
// Настройка consumer с ретраями и DLQ
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "order-service");
props.put("enable.auto.commit", "false");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("orders"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records) {
try {
processOrder(record.value());
consumer.commitSync();
} catch (Exception e) {
// Отправляем в DLQ после неудачных ретраев
sendToDlq(record);
consumer.commitSync();
}
}
}
private void sendToDlq(ConsumerRecord<String, String> record) {
Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("orders-dlq", record.key(), record.value()));
producer.close();
}DLQ широко используется в микросервисных архитектурах, системах обработки платежей, логистике и любых сценариях, где потеря данных недопустима. Это позволяет отделить обработку ошибок от основного потока и обеспечить наблюдаемость.
Используйте DLQ в Kafka, когда вам нужно гарантировать, что ни одно сообщение не будет потеряно, и при этом не блокировать обработку остальных данных. Это стандартный паттерн для построения надежных event-driven систем.
Уровень
Рейтинг:
4
Сложность:
6
Навыки
Node.js
Kafka
Ключевые слова
Подпишись на Golang Developer в телеграм