Kafka Streams: динамически настраивать RocksDb - PullRequest
1 голос
/ 04 апреля 2019

Я хочу настроить производительность Kafka Streams, и для этого мне нужно поиграть со значениями конфигурации RocksDb.

Я вижу, что могу использовать StreamsConfig.ROCKSDB_CONFIG_SETTER_CLASS_CONFIG для настройки конфигурации RocksDB.Как показано здесь .

Но я бы хотел, чтобы он динамически конфигурировался из конфигурации (для изменения порогов без необходимости компилировать и развертывать весь мой код.

Есть ли возможность как-то указать конкретный экземпляр реализации вместо имени класса? (Это позволит установить пороговые значения, например, с помощью файла свойств)

1 Ответ

2 голосов
/ 05 апреля 2019

Ну, вы можете передать параметры конфигурации из файла свойств во время выполнения и установить ClassName в StreamsConfig.ROCKSDB_CONFIG_SETTER_CLASS_CONFIG.Таким образом, вам не придется перекомпилировать и повторно развертывать ваш код снова и снова.Вместо этого во время выполнения вы сможете передавать значение свойств-2.

Пример: вы можете реализовать CustomRockDBConfig, как показано ниже:

public class CustomRocksDBConfig implements RocksDBConfigSetter {

    public static long blockCacheSize = 50*1024*1024L;
    public static long blockSize = 4096L;
    public static boolean cacheIndexAndFilterBlock = false;

    public static Logger log = Logger.getLogger(CustomRocksDBConfig.class);

    @Override
    public void setConfig(String storeName, Options options, Map<String, Object> configs) {

        BlockBasedTableConfig tableConfig = new BlockBasedTableConfig();
        // Reducing default block cache size
        tableConfig.setBlockCacheSize(blockCacheSize);
        // Increasing the block size as default block size is only 4KB
        tableConfig.setBlockSize(blockSize);
        // Index and Filter block
        tableConfig.setCacheIndexAndFilterBlocks(cacheIndexAndFilterBlock);

        options.setTableFormatConfig(tableConfig);
        options.setMaxWriteBufferNumber(2);


    }

}

При настройке свойств StreamsConfig добавьте следующие свойства.

CustomRocksDBConfig.blockCacheSize = properties.get("blockCacheSize");
CustomRocksDBConfig.blockSize = properties.get("blockSize");
CustomRocksDBConfig.cacheIndexAndFilterBlock = properties.get("cacheIndexAndFilterBlock");
properties.put(StreamsConfig.ROCKSDB_CONFIG_SETTER_CLASS_CONFIG, CustomRocksDBConfig.class);

Нет необходимости перекомпилировать код!Он всегда будет читать значения из файла свойств времени выполнения.

...