Kafka KStream - 拓扑设计

时间:2016-09-04 18:03:13

标签: java apache-kafka apache-kafka-streams

我的流是键/值对,我希望以“原始”和60秒聚合的形式保存到数据库。最初我是这样做的:

                       ->foreach
                     /
kStreamBuilder.stream->aggregateBy->process

然后我发现了

一个。 .aggregateby()只返回它匹配的对(我需要所有这些 - 匹配或其他)
湾我可以在.process()阶段使用 HashMap 实现相同的聚合效果。然后,当调用.punctuate()时,我将所有k / v对写入db。

结果拓扑成为:

kStreamBuilder.stream->foreach
kStreamBuilder.stream->process

问题:

  1. 这是一种'合理'的方法来获得匹配或其他匹配的所有kv对的结果吗? (所有值通过 foreach 和任何对+其他通过进程
  2. 我是否需要(以某种方式)划分原始流,然后再将其发送到.foreach().process(),或者是否足以执行上述操作?

1 个答案:

答案 0 :(得分:3)

DSL层中的聚合设计用于"增量聚合",即当前聚合结果加上单个新值"添加"。如果你想访问所有"原始记录"一次60秒的窗口,你需要使用处理器API。

如果您有两个下游运营商,则无需执行任何操作。记录将自动转发给两者。但是,请记住,它们不会被复制,即下游运算符将为每个记录看到相同的Java对象!

相关问题