我目前正在使用akka流并构建一个响应式应用程序。到目前为止,我的理解是设置了async
边界,
每个阶段(流程)都在演员中运行。真的吗?
调用mapAsync
类似于将async
应用于流程?
理想情况下,我会拥有一堆图表,并希望每个图表在演员中并行运行,这有助于扩展。
其他信息:
我正在用反应性kafka实现一些东西,想知道kafka主题消费是如何负载平衡的。即:如果我有20个分区,如果我使用plainPartitionSource
并构建图形,它是否创建了许多消费者角色?
如果要有20个消费者参与者(相当于它正在消耗的特定主题的20个分区),那么理想情况下将有20个图表。实现图形,我希望它在不同的actor中运行。
简而言之,我希望完全并行,具体取决于从消费到处理它的分区数量。
希望我的问题很明确。
编辑:
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)