Лучший подход к загрузке потоковых данных в Lagom Microservice

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

Я использую Лагом для создания микросервиса. Я новичок в Лагоме, поэтому я столкнулся с некоторыми сомнениями.

Я не понимаю, что будет лучшим подходом для публикации моего потока данных (поступающего от нескольких датчиков) в микросервисе, а затем в этом микросервисе для публикации данных в теме кафки.

  1. Является ли функция Lagom потокового сообщения в описании службы ServiceCall[ Source[String, NotUsed], Source[String, NotUsed]] правильным ли способом публикации потоков данных (больших данных) от сотен датчиков Wi-Fi? Имеет ли он право распоряжаться этим огромным количеством потоков данных, получаемых почти в реальном времени (=5 секунд)?

  2. во-вторых, пока я публикую данные в темах кафки, почему я должен реализовать Persistent Entity (рекомендуется Lagom)? Потому что сама Кафка гарантирует хотя бы раз доставку сообщения

Мое приложение не приложение CRUD, оно только поддерживает обработку потоковых данных.

1 ответ

Решение
  1. Потоковые вызовы Lagom используют WebSockets. Он основан на поддержке WebSocket от Play, которая может масштабироваться до миллионов подключенных клиентов. Я бы не назвал сотни датчиков Wi-Fi огромным количеством данных, Lagom легко справится с этим, а Lagom также можно легко масштабировать по горизонтали, поэтому, если выполняемая вами обработка тяжелая, вы можете легко распределить эту обработку по многим узлам.,

  2. Публикация входящего потока WebSocket в Kafka в настоящее время не поддерживается в Lagom. Хотя Кафка дает гарантию хотя бы один раз после публикации сообщения в Кафке, таких гарантий нет при передаче этого сообщения в Кафку в первой инстанции. Например, если вы выполните побочный эффект, например, обновите базу данных, а затем опубликуете сообщение, нет гарантии, что, если произойдет сбой приложения между обновлением базы данных и публикацией сообщения в Kafka, это сообщение в конечном итоге будет быть опубликованным в Kafka (на самом деле это не будет, это сообщение будет потеряно). Вот почему Lagom рекомендует публиковать только потоки событий базы данных в Kafka, поскольку публикация журнала событий таким способом гарантирует, что любая операция базы данных, которая затем должна быть отправлена ​​в Kafka, будет выполняться хотя бы один раз. Однако, если вы не делаете побочные эффекты, которые, как вам кажется, не являются, то это может не иметь отношения к вам. В этом случае я бы порекомендовал использовать akka-streams-kafka (на чем основана поддержка Lagom Kafka) напрямую.

Я поднял вопрос, касающийся вашего варианта использования здесь.

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