Apache kafka 如何正确查询kafka streams状态存储?
一个月前,我用20个streams线程构建了一个kafka streams应用程序。该应用程序计算不同人群在固定时间间隔内的消费量。最近,我发现人们从当地国营商店查询到的消费金额不真实。我已经阅读了官方文件和我能找到的任何其他文件,但没有找到解决方法 我使用了卡夫卡版本0.11.0.3,卡夫卡服务器的版本是0.11.0.3,卡夫卡流api也是0.11.0.3。只有一个应用程序具有20个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
- 复制系数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是生命的终结。。。