Apache kafka 如何正确查询kafka streams状态存储?

Apache kafka 如何正确查询kafka streams状态存储?,apache-kafka,kafka-consumer-api,apache-kafka-streams,Apache Kafka,Kafka Consumer Api,Apache Kafka Streams,一个月前,我用20个streams线程构建了一个kafka streams应用程序。该应用程序计算不同人群在固定时间间隔内的消费量。最近,我发现人们从当地国营商店查询到的消费金额不真实。我已经阅读了官方文件和我能找到的任何其他文件,但没有找到解决方法 我使用了卡夫卡版本0.11.0.3,卡夫卡服务器的版本是0.11.0.3,卡夫卡流api也是0.11.0.3。只有一个应用程序具有20个streams线程 一些重要信息: 卡夫卡流配置: 复制系数3 num.stream.threads 20 c

一个月前,我用20个streams线程构建了一个kafka streams应用程序。该应用程序计算不同人群在固定时间间隔内的消费量。最近,我发现人们从当地国营商店查询到的消费金额不真实。我已经阅读了官方文件和我能找到的任何其他文件,但没有找到解决方法

我使用了卡夫卡版本0.11.0.3,卡夫卡服务器的版本是0.11.0.3,卡夫卡流api也是0.11.0.3。只有一个应用程序具有20个streams线程

一些重要信息: 卡夫卡流配置:
  • 复制系数3
  • num.stream.threads 20
  • commit.interval.ms 1000
  • partition.assignment.strategy StickyAssignor.class.getName()
  • fetch.max.wait.ms 500
  • 最高投票记录5000
  • 最大轮询间隔毫秒300000
  • 心跳.interval.ms 3000
  • session.timeout.ms 30000
  • auto.offset.reset最新版本
卡夫卡消息结构
  • key=人名
  • 价值=他花的钱
  • 时间=创建此邮件的当前时间
卡夫卡流生成代码:
KStreamBuilder KStreamBuilder=new KStreamBuilder();
KStream peopleSpendStream=kStreamBuilder.stream(主题);
PeoplePendstream.groupByKey()//按人名分组
.aggregate(()->新HashMap(8192),
(键、值、聚合)->{
聚合。合并(键、值、双精度::和);
总回报;
},
时间窗口。of(一分钟)。直到(一小时*10),//1分钟窗口,保持9小时
new HashMapSerde(),//由jackson实际序列化和反序列化
人员(消费、商店、姓名);
查询代码:
long time=System.currentTimeMilles();
for(String name:names){//按人名查询
try(WindowsStore迭代器迭代器=store.fetch(名称,时间-十分钟,时间)){
forEachRemaining(kv->log.info(“name={},time={},cost={}”,name,kv.key,kv.value));
}
}

我做错什么了吗?我特别需要您的帮助。

您的聚合窗口为一小时,但您在查询中获取的是10分钟的窗口?我如何将聚合窗口更改为一分钟?我设置了'TimeWindows.of(一分钟)。直到(一小时*10)'我阅读azkarra streams文档,它需要jdk11和kafka 2.x,但我使用jdk8和kafka 0.11.0.3…好吧,你可以使用kafka 2.x客户端,将旧的代理版本降低到0.11.0,Java 8是生命的终结。。。