gpt4 book ai didi

apache-kafka-streams - 如何在固定大小的基于计数的滑动窗口上进行聚合?

转载 作者:行者123 更新时间:2023-12-04 16:14:30 27 4
gpt4 key购买 nike

如何使用固定大小的基于计数的窗口实现滑动窗口聚合(或转换)?

例如:如果我有如下流数据

input stream = 1,2,3,4,5,6,7,8...

假设时间在这里无关紧要。并说我的聚合函数是 AVERAGE 并且窗口大小固定为 3 条记录(不是 3 毫秒、3 秒、3 小时等),我希望我的输出流为
output stream = avg(1,2,3), avg(2,3,4), avg(3,4,5), avg(4,5,6), avg(5,6,7)... = 2,3,4,5,6...

Kafka 流工作中记录的 Windows 是“基于时间的”。甚至基类 Window 的构造函数也具有以下签名:
Window(long startMs, long endMs)

所以我不确定它是否是正确的工具 非基于时间 窗口聚合。

Apache Flink 支持 count-based sliding and tumbling windows .这正是我所需要的,但我正在 Kafka Streams 中寻找类似的功能。

最佳答案

如果您不关心时间排序,您可以实现自定义 Transformer与附加状态。

StreamsBuilder builder = new StreamsBuilder();
builder.addStoreStore(...); // add KeyValueStore here
KStream result = builder.stream("topic").transform(...); // pass in name of your KeyValueStore, too

为您定制 Transformer您可以维护一个 List每个键,列表是你的窗口——只要列表小于你的窗口大小,你就将新记录附加到列表中——如果它正好是大小,你就会触发计算——如果它超过了大小,你修剪它并在之后触发计算。

有关更多详细信息,请参阅文档: https://kafka.apache.org/10/documentation/streams/developer-guide/processor-api.html (请注意, ProcessorTransformer 基本上是一回事。)

关于apache-kafka-streams - 如何在固定大小的基于计数的滑动窗口上进行聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49087533/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com