Лучший подход к загрузке потоковых данных в Lagom Microservice
Я создаю приложение потоковой аналитики, в котором каждая аналитика / функциональность будет реализована как микросервис, чтобы впоследствии эту аналитику можно было использовать в другом проекте.
Я использую Лагом для создания микросервиса. Я новичок в Лагоме, поэтому я столкнулся с некоторыми сомнениями.
Я не понимаю, что будет лучшим подходом для публикации моего потока данных (поступающего от нескольких датчиков) в микросервисе, а затем в этом микросервисе для публикации данных в теме кафки.
Является ли функция Lagom потокового сообщения в описании службы ServiceCall[ Source[String, NotUsed], Source[String, NotUsed]] правильным ли способом публикации потоков данных (больших данных) от сотен датчиков Wi-Fi? Имеет ли он право распоряжаться этим огромным количеством потоков данных, получаемых почти в реальном времени (=5 секунд)?
во-вторых, пока я публикую данные в темах кафки, почему я должен реализовать Persistent Entity (рекомендуется Lagom)? Потому что сама Кафка гарантирует хотя бы раз доставку сообщения
Мое приложение не приложение CRUD, оно только поддерживает обработку потоковых данных.
1 ответ
Потоковые вызовы Lagom используют WebSockets. Он основан на поддержке WebSocket от Play, которая может масштабироваться до миллионов подключенных клиентов. Я бы не назвал сотни датчиков Wi-Fi огромным количеством данных, Lagom легко справится с этим, а Lagom также можно легко масштабировать по горизонтали, поэтому, если выполняемая вами обработка тяжелая, вы можете легко распределить эту обработку по многим узлам.,
Публикация входящего потока WebSocket в Kafka в настоящее время не поддерживается в Lagom. Хотя Кафка дает гарантию хотя бы один раз после публикации сообщения в Кафке, таких гарантий нет при передаче этого сообщения в Кафку в первой инстанции. Например, если вы выполните побочный эффект, например, обновите базу данных, а затем опубликуете сообщение, нет гарантии, что, если произойдет сбой приложения между обновлением базы данных и публикацией сообщения в Kafka, это сообщение в конечном итоге будет быть опубликованным в Kafka (на самом деле это не будет, это сообщение будет потеряно). Вот почему Lagom рекомендует публиковать только потоки событий базы данных в Kafka, поскольку публикация журнала событий таким способом гарантирует, что любая операция базы данных, которая затем должна быть отправлена в Kafka, будет выполняться хотя бы один раз. Однако, если вы не делаете побочные эффекты, которые, как вам кажется, не являются, то это может не иметь отношения к вам. В этом случае я бы порекомендовал использовать akka-streams-kafka (на чем основана поддержка Lagom Kafka) напрямую.
Я поднял вопрос, касающийся вашего варианта использования здесь.