Sobes.tech
Senior
23

Как разрешить конфликт требований: задержка не более 20 минут, но файлы должны быть большими (512 МБ), если данных в топике мало?

Companies where asked
OZONOZON

Answer from AI

sobes.tech AI

Чтобы разрешить конфликт требований — задержка не более 20 минут и файлы должны быть большими (512 МБ), даже если данных в топике мало, можно использовать следующие подходы:

  • Буферизация и таймауты: накапливать данные до достижения размера файла или максимального времени ожидания (20 минут), после чего отправлять файл, даже если он меньше 512 МБ.
  • Динамическое формирование файлов: если данных мало, отправлять меньший файл по таймауту, чтобы не превышать задержку.
  • Компромисс по размеру: установить минимальный размер файла, например, 256 МБ, если 512 МБ не набирается за 20 минут.

Пример на Java (псевдокод):

long maxDelay = 20 * 60 * 1000; // 20 минут
long maxSize = 512 * 1024 * 1024; // 512 МБ
long startTime = System.currentTimeMillis();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();

while (true) {
    byte[] data = pollDataFromTopic();
    if (data != null) {
        buffer.write(data);
    }
    long elapsed = System.currentTimeMillis() - startTime;
    if (buffer.size() >= maxSize || elapsed >= maxDelay) {
        sendFile(buffer.toByteArray());
        buffer.reset();
        startTime = System.currentTimeMillis();
    }
}

Такой подход гарантирует, что задержка не превысит 20 минут, а размер файла будет максимально близок к 512 МБ, если данные позволяют.