Kafka Streams:动态配置RocksDb

时间:2019-04-04 10:30:00

标签: apache-kafka-streams rocksdb

我想调整Kafka Streams的性能,为此,我必须使用RocksDb配置值。

我知道我可以使用StreamsConfig.ROCKSDB_CONFIG_SETTER_CLASS_CONFIG来设置RocksDB的配置。就像显示的here

但是我想要一种从配置动态配置它的方法(以便在不编译和部署所有代码的情况下更改阈值。

是否可以通过某种方式给出具体的实现实例而不是类名? (这将允许设置阈值,例如,使用属性文件)

1 个答案:

答案 0 :(得分:2)

好吧,您可以在运行时从属性文件传递配置参数,并在StreamsConfig.ROCKSDB_CONFIG_SETTER_CLASS_CONFIG中设置ClassName。这样,您将不必一次又一次地重新编译和重新部署代码。而是在运行时,您将能够传递different-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);

无需重新编译代码!它将始终从运行时属性文件中读取值。