首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在基于固定尺寸计数的滑动窗口上进行聚合?

如何在基于固定尺寸计数的滑动窗口上进行聚合?
EN

Stack Overflow用户
提问于 2018-03-03 18:14:58
回答 2查看 1.8K关注 0票数 4

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

如果我有如下所示的流数据

代码语言:javascript
运行
复制
input stream = 1,2,3,4,5,6,7,8...

假设时间与这里无关。假设我的聚合函数是平均值,窗口大小固定在3个记录(不是3Millis,3秒,3个小时等),我希望我的输出流是

代码语言:javascript
运行
复制
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...

卡夫卡流作品中记录的Windows是“基于时间的”。甚至基类窗口的构造函数都有以下签名:

代码语言:javascript
运行
复制
Window(long startMs, long endMs)

因此,我不确定它是否是进行基于的非时间窗口聚合的正确工具。

Apache支持基于计数的滑动和翻滚窗口。这正是我所需要的,但我正在寻找一个类似的功能卡夫卡流。

EN

回答 2

Stack Overflow用户

发布于 2018-03-05 01:08:32

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

代码语言:javascript
运行
复制
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基本上是相同的)。

票数 4
EN

Stack Overflow用户

发布于 2018-03-04 05:46:06

如果您希望使用Apache,它也是一个流引擎,那么kafka可以作为数据源连接到它。Storm新版本提供了一个名为“滚动窗口”的概念,它为您的拓扑提供了确切数量的元组。这可以很容易地用来解决你的问题。

想了解更多信息,请看一下storm-component-guide/content/storm-windowing-concepts.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49087533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档