Акка потоки против Apache Флинк - PullRequest
0 голосов
/ 23 апреля 2020

При изучении потоков Akka я также натолкнулся на Apache Flink, какой механизм обработки потоков. Akka streams реализует реактивные потоки и поддерживает противодавление.

Так что, если мне нужно принять решение между двумя, для чего мне go? Чем они отличаются и в чем сходство? Какими здесь должны быть критерии?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Я не эксперт в Akka Streams, но, насколько мне известно, основное отличие состоит в том, что Flink предлагает распределение обработки «из коробки», а Akka Streams - нет, поскольку он был разработан для обработки данных на один узел.

Сходство между ними заключается в том, что они оба предлагают возможности потоковой обработки, и в этом смысле они, вероятно, имеют схожие функции.

Но Flink имеет несколько дополнительных модулей, таких как SQL, CEP, или машинное обучение, которое вы не сможете получить в Akka Streams. Кроме того, Flink обеспечивает отказоустойчивость и восстановление состояния, что, я не уверен, если присутствует в Akka Streams из коробки.

С другой стороны, настройка Akka Streaming потребует меньше работы, поскольку вы этого не делаете. вам не нужно заботиться о настройке JobManager & TaskManager, но вы можете просто создать приложение Java / Scala, докеризировать и запустить его где-нибудь.

Итак, главный вопрос, который вы должны задать себе, - это если вы данные обработка настолько велика, что ее придется обрабатывать на нескольких узлах, если это так. У вас действительно нет другого выбора, кроме Flink (только в сценарии Akka Streams vs. Flink). Однако, если данные, которые вы собираетесь обрабатывать, могут быть обработаны на одном узле, тогда вам следует оценить необходимые вам гарантии отказоустойчивости и доставки сообщений. В общем случае использование Akka Streams может быть проще для начала, но Flink может вступить во владение, когда дело доходит до производства приложения.

1 голос
/ 26 апреля 2020

Akka Streams - это библиотека, реализующая спецификацию реактивных потоков .

Apache Flink - потоковый движок.

Основное различие высокого уровня заключается в том, что в Apache Flink вы создаете работу, кодируя один из API-интерфейсов Flink, и отправляете эту работу в Apache Flink кластер. Именно кластер Apache Flink выполняет задание обработки потока. Используя Akka Streams , вы создаете отдельное приложение. В этом смысле Akka Streams является более легким из этих двух.

Вы все еще можете распространять приложение Akka Streams , используя StreamRefs , хотя вам нужно сделать это явно в коде и запустить Akka Cluster . Apache Flink уже управляет кластером, поэтому вам не нужно делать это явно в вашем коде (хотя вам все еще нужно настроить и запустить кластер, чтобы отправлять задания). Apache Flink имеет встроенные умные способности, позволяющие выполнять работу и выполнять ее оптимальным образом. Распараллеливание / распределение выполнения , когда это возможно . Вы не получите этого с Akka Streams .

Apache Flink Потоковая обработка предназначена для достижения end2end ровно после обработки семантики в лицо неудач. В Akka Streams такая гарантия должна быть явно реализована в вашем коде.

Akka Streams , поскольку реализация спецификации реактивных потоков полностью связана с асинхронной и связанной с памятью обработкой. Akka HTTP , например, построен поверх Akka Streams и в результате реализует очень эффективную и легкую клиентскую и серверную стороны протокола HTTP.

Akka Streams реализует асинхронное неблокирующее противодавление (согласно спецификации реактивных потоков), чтобы гарантировать ограниченность памяти во время выполнения. Apache Flink также имеет механизм противодавления , хотя он не реализован таким же образом.

Akka Streams , поскольку реализация спецификации реактивных потоков может взаимодействовать с другими реализациями, такими как Rx Java или Project Reactor . Apache Flink не является частью какого-либо более широкого стандарта.

Я бы сказал, что основными причинами go для Apache Flink являются как раз однажды гарантированные и автоматические рассылки, которые идут с ним. В противном случае Akka Streams - это очень мощный API с более простой моделью исполнения.

РЕДАКТИРОВАТЬ: Вероятно, стоит упомянуть проект Alpakka , который привносит множество технологий в Akka Streams , чтобы их можно было подключить к обработке на основе реактивных потоков.

...