问题描述
我有以下设置。在kubernetes上运行的Kafka-Broker。一个带有kafka流的SpringBoot应用程序,一个作为KSteram的输入主题。
在流上,我对密钥进行分组,并使用聚合并构建MaterializedView-> KeyValueStore RocksDB。 该数据库包括135048个键/值对。
我这样读取所有键/值对
private ReadOnlyKeyValueStore<String,PriceDomain> keyValueStore;
public List<PriceModel> fetchAllPriceInErrorState() {
if (this.keyValueStore == null) {
this.keyValueStore = queryService.getQueryableStore(
ModelStrings.PRICE_STORE_NAME,QueryableStoreTypes.keyValueStore()
);
}
while (keyValueIterator.hasNext()) {
KeyValue<String,PriceDomain> keyValue = keyValueIterator.next();
PriceDomain priceDomain1 = keyValue.value;
PriceModel priceModel = convertToPriceModel(priceDomain1);
priceModelList.add(priceModel);
}
}
这将需要约3-4秒的时间来执行。有没有一种方法可以增加从存储中获取所有键值对的执行时间? 当然,大多数时候我可以直接通过键访问值,这将很快。但是有时我需要所有键/值对。
假设将来会有更多的键/值对(约500-1000k),那么这将花费约5-10倍的时间
感谢帮助
解决方法
我认为您必须设置更多数量的分区(基于构建商店的输入主题),而不是运行多个此类应用程序。每个实例只会消耗部分消息(键->值),并且运行速度更快