我的流是键/值对,我希望以“原始”和60秒聚合的形式保存到数据库。最初我是这样做的:
->foreach
/
kStreamBuilder.stream->aggregateBy->process
然后我发现了
一个。 .aggregateby()
只返回它匹配的对(我需要所有这些 - 匹配或其他)
湾我可以在.process()
阶段使用 HashMap 实现相同的聚合效果。然后,当调用.punctuate()
时,我将所有k / v对写入db。
结果拓扑成为:
kStreamBuilder.stream->foreach
kStreamBuilder.stream->process
.foreach()
和.process()
,或者是否足以执行上述操作?答案 0 :(得分:3)
DSL层中的聚合设计用于"增量聚合",即当前聚合结果加上单个新值"添加"。如果你想访问所有"原始记录"一次60秒的窗口,你需要使用处理器API。
如果您有两个下游运营商,则无需执行任何操作。记录将自动转发给两者。但是,请记住,它们不会被复制,即下游运算符将为每个记录看到相同的Java对象!