我目前正在使用 akka 流并构建一个反应式应用程序。到目前为止,我的理解async
是设定边界时,
每个阶段(流程)都在一个演员中运行。真的吗?
调用mapAsync
类似于应用async
到流?
理想情况下,我会有一堆图表,并希望每个图表在一个演员中并行运行,这有助于扩展。
附加信息:
我正在用反应式 kafka 实现一些东西,想知道 kafka 主题消耗是如何负载平衡的。即:如果我有 20 个分区,如果我正在使用plainPartitionSource
并构建一个图形,它会创建那么多消费者参与者吗?
如果将有 20 个消费者参与者(等于它正在消费的特定主题的 20 个分区),那么理想情况下会有 20 个图。将图表具体化,我希望它在不同的参与者中运行。
简而言之,我想要完全并行,这取决于分区的数量,从消费到处理它。
希望我的问题很清楚。
编辑:
val consumerGroup =
Consumer.committablePartitionedSource(consumerSettings, Subscriptions.topics("topic1"))
//Process each assigned partition separately
consumerGroup.map {
case (topicPartition, source) =>
source
.via(business)
.toMat(Sink.ignore)(Keep.both)
.run()
}
.mapAsyncUnordered(maxPartitions)(_._2)
//maxPartitions create that
//many actors here to materialize each of the internal graph in
//separate actors?
.runWith(Sink.ignore)