Встречается на собеседованиях • сегодня
Как реализовать отказоустойчивость при чтении 20 млн записей из базы данных и отправки в Message Broker
Для обработки больших объемов данных с отказоустойчивостью:
1. **Пакетная обработка** - читаем данные порциями (batch):
```java
int batchSize = 1000;
int offset = 0;
List batch;
do {
batch = repository.findBatch(offset, batchSize);
sendToBroker(batch);
offset += batchSize;
} while (!batch.isEmpty());
```
2. **Идемпотентность** - каждая запись должна иметь уникальный ID для предотвращения дублирования.
3. **Транзакционность** - отмечаем обработанные записи в той же транзакции, что и отправку:
```java
@Transactional
public void processBatch(List batch) {
broker.send(batch);
repository.markAsProcessed(batch);
}
```
4. **Ретри и dead letter queue** - настраиваем повторные попытки для временных ошибок и DLQ для неустранимых.
5. **Контрольные точки** - периодически сохраняем позицию (offset) обработки.
6. **Распределенная обработка** - для масштабирования можно использовать Spring Batch или Kafka Connect.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы