Async и mapAsync - достижение параллелизма в потоках akka - реактивная кафка
В настоящее время я работаю с потоками 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)