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)

0 ответов

Другие вопросы по тегам