Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡流和窗口,在一个时间窗口内保持计数_Java_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Java 卡夫卡流和窗口,在一个时间窗口内保持计数

Java 卡夫卡流和窗口,在一个时间窗口内保持计数,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我是Stackoverflow的新手,所以如果这个问题问得不好,请原谅我。非常感谢任何帮助/灵感 我正在使用Kafka streams将传入的数据过滤到我的数据库中。传入的消息看起来像{“ID”:“X”,“time”:“HH:MM”}和一些其他参数,在本例中不相关。我设法让一个java应用程序运行,它读取一个主题并打印出传入的消息。现在我要做的是使用KTables(?)将具有相同ID的传入消息分组,然后使用会话窗口将表分组到时隙中。我想要一个X分钟的时间窗口,在时间轴上连续运行 当然,第一件事是

我是Stackoverflow的新手,所以如果这个问题问得不好,请原谅我。非常感谢任何帮助/灵感

我正在使用Kafka streams将传入的数据过滤到我的数据库中。传入的消息看起来像
{“ID”:“X”,“time”:“HH:MM”}
和一些其他参数,在本例中不相关。我设法让一个java应用程序运行,它读取一个主题并打印出传入的消息。现在我要做的是使用KTables(?)将具有相同ID的传入消息分组,然后使用会话窗口将表分组到时隙中。我想要一个X分钟的时间窗口,在时间轴上连续运行

当然,第一件事是运行KTable来统计具有相同ID的传入消息。我想做的应该是这样的:

ID       Count
X          1
Y          3
Z          1
这会不断更新,因此带有过期时间戳的消息会从表中删除

我不是百分之百确定,但我想我想要的是KTables而不是KStreams,对吗?如果这是达到预期效果的正确方法,我如何实现滑动窗口

这就是我现在使用的代码。它只读取主题并打印传入的消息

private static List<String> printEvent(String o) {
    System.out.println(o);
    return Arrays.asList(o);
}

final StreamsBuilder builder = new StreamsBuilder();
    builder.<String, String>stream(srcTopic)
    .flatMapValues(value -> printEvent(value));
私有静态列表printEvent(字符串o){
系统输出打印ln(o);
返回数组。asList(o);
}
最终StreamsBuilder生成器=新StreamsBuilder();
stream(srcTopic)
.flatMapValues(值->打印事件(值));
我想知道我必须添加什么来实现上面所述的期望输出,以及我在代码中的位置


提前感谢您的帮助

是的,您需要Ktable和滑动窗口,我也建议您查看,以处理延迟交付的邮件。

KTable oneMinuteWindowed=yourKStream
.groupByKey()
.减少(/*您的加法器*/,时间窗口为(60*1000,60*1000),“存储1M”);
//其中,加法器可以简单到(val,agg)->agg+val
//对于基本类型或您需要的复杂类型
KTable<Windowed<Key>, Value> oneMinuteWindowed = yourKStream

.groupByKey()

.reduce(/*your adder*/, TimeWindows.of(60*1000, 60*1000), "store1m");
        //where your adder can be as simple as (val, agg) -> agg + val
        //for primitive types or as complex as you need