Теперь я использую инкрементную контрольную точку в Flink с RocksDB, работающую в среде контейнера. Как я знаю, для выполнения инкрементальной контрольной точки у rockdb будет много памяти, JIRA уже описывает эту проблему:
https://issues.apache.org/jira/browse/FLINK-7289
Я попытался настроить конфигурацию моего Rocksdb, но мой контейнер все еще был убит из-за OOM. Вот страница монитора: мой контейнер будет уничтожен и перезапущен, а затем снова уничтожен.
Вот мои конфигурации:
public class BackendOptions implements OptionsFactory {
@Override
public DBOptions createDBOptions(DBOptions dbOptions) {
return dbOptions
.setIncreaseParallelism(4)
.setUseFsync(false)
.setMaxOpenFiles(-1);
}
@Override
public ColumnFamilyOptions createColumnOptions(ColumnFamilyOptions columnFamilyOptions) {
return columnFamilyOptions.setCompactionStyle(CompactionStyle.LEVEL)
.setLevelCompactionDynamicLevelBytes(true)
.setTargetFileSizeBase(256 * 1024 * 1024)
.setWriteBufferSize(64 * 1024 * 1024)
.setMaxBytesForLevelBase(1024 * 1024 * 1024)
.setMinWriteBufferNumberToMerge(2)
.setMaxWriteBufferNumber(5)
.setOptimizeFiltersForHits(true)
.setTableFormatConfig(
new BlockBasedTableConfig()
.setBlockCacheSize(256 * 1024 * 1024) // 256 MB
.setBlockSize(128 * 1024) //// 128 KB
.setCacheIndexAndFilterBlocks(true)
);
}
Я делаю контрольную точку каждые 1 минуту, а размер состояния составляет около 5 ГБ.
Может ли кто-нибудь мне помочь или сказать какой-нибудь правильный способ использовать инкрементную контрольную точку?