一个月前,我用20个流线程构建了一个kafka-streams应用程序。这个应用程式会计算固定时间间隔内不同人的消费量。最近我发现从当地国营商店查询的人们的花钱少于真实的钱。我已阅读官方文件以及可以找到的任何其他文件,但尚未找到解决方法。
我使用的是Kafka版本0.11.0.3,kafka服务器的版本为0.11.0.3,kafka流api也是0.11.0.3。只有一个具有20个流线程的应用程序。
KStreamBuilder kStreamBuilder = new KStreamBuilder();
KStream<String, Double> peopleSpendStream = kStreamBuilder.stream(topic);
peopleSpendStream.groupByKey()// group by people's name
.aggregate(() -> new HashMap<String, Double>(8192),
(key, value, aggregate) -> {
aggregate.merge(key, value, Double::sum);
return aggregate;
},
TimeWindows.of(ONE_MINUTE).until(ONE_HOUR * 10), // 1-min window, keep 9 hours
new HashMapSerde<>(), // serialize and deserialize by jackson actually
PEOPLE_SPEND_STORE_NAME);
查询代码:
long time = System.currentTimeMilles();
for (String name : names) { // query by people's name
try (WindowStoreIterator<HashMap<String, Double>> iterator = store.fetch(name, time - TEN_MINUTE_MILLES, time)) {
iterator.forEachRemaining(kv -> log.info("name = {}, time = {}, cost = {}", name, kv.key, kv.value));
}
}
我有什么不对吗?我特别需要您的帮助。