Kafka Streams QueryableStore-ReadOnlyKeyValueStore快速访问

问题描述

我有以下设置。在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倍的时间

感谢帮助

解决方法

我认为您必须设置更多数量的分区(基于构建商店的输入主题),而不是运行多个此类应用程序。每个实例只会消耗部分消息(键->值),并且运行速度更快

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...