akka-stream使用SubFlows进行压缩流程

时间:2016-04-26 10:39:48

标签: scala akka akka-stream stream-processing

我有一个关于akka-streams的简短问题。 基本上,我尝试将流分成两个流,这两个流中的一个将使用groupBy在多个子流中再次拆分,这些子流中的每一个都需要与另一个流(zip)连接。我试图说明这个here

这是我到目前为止所得到的

 val aggFlow = Flow.fromGraph(GraphDSL.create() { implicit builder =>

        val broadcast = builder.add(Broadcast[Event](2))
        val zip = builder
            .add(ZipWith[ChangedEvent, Long, (ChangedEvent, Long)]((value, key) => (value, key)))

        val source = broadcast.out(1) ~> identityFlow ~> maxFlow

        broadcast.out(0) ~> 
        identityFlow ~> 
        topicFlow
            .groupBy(MAX_SUB_STREAMS, _._1)
            .zipWith[ChangedEvent, (Long, ChangedEvent)](source)((max, ce) => (max, sm))
            .takeWhile(deciderFunction)
            .mergeSubstreams

        ???
      })

我遇到的问题是broadcast.out(1) ~> identityFlow ~> maxFlow没有返回源,但有没有办法从中获取源或使用两个流的zipWith?或者甚至是获得相同结果的更好方法?

更多信息:我有一个包含事件的流(无尽的)(一些信息和时间戳)。我想根据时间戳聚合它们(我从时间戳生成一个“主题”)。因此,事件使用groupBy函数根据其时间戳进行分组。然后我想折叠它们。问题是由于它是一个(无限)流,groupBy函数创建的子流/子流永远不会关闭。因此,我想拆分流。流的一部分将用于生成可由deciderFunction使用的事件。超过部分将用于创建子流/子流。我希望这有助于理解我想要做的事情。

0 个答案:

没有答案
相关问题