Я - Кафка для java-микросервисов с Streams, и мы также используем KeyValueStore для того, чтобы поддерживать локальное состояние.
Наш сервис работает, но мы хотели бы ограничить объем диска, который KeyValueStore (поддерживаемый RocksDB) может занять локально. Есть ли какой-нибудь вариант, который мы могли бы использовать для этого?
Я пытался использовать что-то вроде:
</p>
<p>public class RocksDbMaxDbSizeConfigurationSetter implements RocksDBConfigSetter {
private final static Logger LOG = LoggerFactory.getLogger(RocksDbMaxDbSizeConfigurationSetter.class);
private long maxDbSizeInGb = 1;</p>
<p>@Override
public void setConfig(String storeName, Options options, Map configs) {
LOG.info("Setting custom properties for RocksDb store [{}] setting the maxSize to [{}].", storeName, maxDbSizeInGb);
options.setCompactionStyle(CompactionStyle.FIFO);
CompactionOptionsFIFO compactionOptionsFIFO = new CompactionOptionsFIFO();
compactionOptionsFIFO.setMaxTableFilesSize(maxDbSizeInGb);</p>
options.setCompactionOptionsFIFO(compactionOptionsFIFO);
}}
но когда я использую этот класс, у меня появляется странный побочный эффект, значения удаляются из KeyValueStore, даже если они содержат 4 записи.
Моя попытка верна? Есть ли какой-либо другой способ ограничить объем данных, которые принимает rocksdb?
В каком блоке выражается maxTableFileSize?
Спасибо!