Akka Streams + Akka Cluster

У меня вопрос по использованию Akka Streams и Akka Cluster. Я пытаюсь создать версию распределенного подсчета слов с помощью Akka Streams и Akka Cluster.

Я хотел бы создать клиент Akka Streams, который считывает текстовый файл как потоковый ввод-вывод и отправляет поток слов в удаленный кластер. Это код клиента:

final Path file = Paths.get("example.txt");
final Source<ByteString, CompletionStage<IOResult>> read = FileIO.fromPath(file);

final Source<Pair<String, Integer>, CompletionStage<IOResult>> counts =
  read
    .via(Framing.delimiter(ByteString.fromString(" "), 256, FramingTruncation.ALLOW))
    .map(i -> i.utf8String())
    .runWith(/* send to Akka cluster */);

Я не понимаю, что мне нужно использовать для отправки потоковых данных в кластер Akka без потери баз Akka Streams (обратное давление и т. Д.).

Я знаю о существовании Stream refs и Cluster Client, но не понимаю, какие из них использовать.


person Alexh2o    schedule 10.11.2018    source источник
comment
Есть способ интегрировать акторов с потоками akka: doc.akka.io/docs/akka/2.5.3/scala/stream/, хотя я не думаю, что это хорошая идея, поскольку для сохранения обратного давления , вам нужно добавить много шаблонов для ваших актеров ...   -  person RoberMP    schedule 13.11.2018


Ответы (2)


Прямой ответ

Я не думаю, что функции, которые вы ищете, доступны в версии 2.5.18. инвентарь кластера функциональность не содержит ничего, связанного с потоками.

Косвенный ответ

Вычислительные требования для вашего варианта использования должны быть довольно экстремальными, чтобы оправдать akka-stream охват нескольких серверов. Объем параллелизма, доступный на одном сервере, довольно велик, учитывая резкое увеличение количества ядер на современных процессорах. Следовательно, каждый шаг вычислений в вашем потоке потребует огромного количества ресурсов процессора, чтобы оправдать распространение потока по сети.

Если вы действительно работаете над таким большим проектом, тогда такой инструмент, как apache spark может лучше соответствовать вашим потребностям.

person Ramón J Romero y Vigil    schedule 11.11.2018
comment
Я знаю, что этот вариант использования не оправдывает использование потоков akka, но я работал с ним как с начальной частью моей диссертации. Я использую этот вариант использования только для того, чтобы начать использовать инструментарий akka. Чем я надеюсь использовать более реалистичный и экстремальный вариант использования. - person Alexh2o; 12.11.2018

Я не думаю, что в настоящее время существует то, что вы ищете. Однако есть похожая вещь, называемая streamRefs, которая позволяет вам иметь реактивные потоки по сети. Взгляните здесь: https://doc.akka.io/docs/akka/2.5/stream/stream-refs.html

person hveiga    schedule 12.11.2018
comment
Я читал о StreamRef, но похоже, что это что-то, чтобы связать два потока по сети. Вместо этого я хочу связать один поток с несколькими потоками на нескольких узлах в кластере akka. Теперь я использую первый поток в качестве издателя, а потоки в кластере в качестве потребителя с потоками akka Kafka, но я не знаю, лучшее ли это решение. - person Alexh2o; 12.11.2018