Kafka Streams QueryableStore - ReadOnlyKeyValueStore 快速访问
Kafka Streams QueryableStore - ReadOnlyKeyValueStore fast access
我有以下设置。 kubernetes 上的 Kafka-Broker 运行。一个带有 kafka-streams 和一个输入主题作为 KSteram 的 SpringBoot 应用程序。
在流中,我对键进行分组并使用聚合并构建一个 MaterializedView -> KeyValueStore RocksDB。
数据库包括 135048 key/value 对。
我读了所有 key/value-这样的对
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 秒来执行。有没有办法增加从商店中获取所有键值对的执行时间?
当然,大多数时候我可以直接通过键访问值,这会很快。但有时我需要所有 key/value 对。
假设将来有更多的 key/value 对 (~500-1000k) 那么这将花费 ~ 5-10 倍的时间
感谢帮助
我认为您必须设置比 运行 几个这样的应用程序更多的分区数(输入主题基于哪个商店被构建)。每个实例只会消耗一些消息子集(Key -> Values)并且它会运行更快
我有以下设置。 kubernetes 上的 Kafka-Broker 运行。一个带有 kafka-streams 和一个输入主题作为 KSteram 的 SpringBoot 应用程序。
在流中,我对键进行分组并使用聚合并构建一个 MaterializedView -> KeyValueStore RocksDB。 数据库包括 135048 key/value 对。
我读了所有 key/value-这样的对
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 秒来执行。有没有办法增加从商店中获取所有键值对的执行时间? 当然,大多数时候我可以直接通过键访问值,这会很快。但有时我需要所有 key/value 对。
假设将来有更多的 key/value 对 (~500-1000k) 那么这将花费 ~ 5-10 倍的时间
感谢帮助
我认为您必须设置比 运行 几个这样的应用程序更多的分区数(输入主题基于哪个商店被构建)。每个实例只会消耗一些消息子集(Key -> Values)并且它会运行更快