Маршрутизация сообщений от Kafka для клиентов веб-сокетов, подключенных к кластеру серверов приложений - PullRequest
0 голосов
/ 15 октября 2019

Я хотел бы выяснить, как лучше всего перенаправлять сообщения от Kafka на клиенты веб-сокетов, подключенные к кластеру серверов приложений с балансировкой нагрузки. Я понимаю, что spring-kafka облегчает потребление и публикацию сообщений в теме kafka, но как это работает в сценарии сервера приложений с балансировкой нагрузки при подключении к теме распределенной kafka. Вот требования, которые я хотел бы удовлетворить, с общей целью облегчения обмена сообщениями между равноправными узлами в приложении с очень и очень большим количеством пользователей:

  1. Веб-клиенты могут подключаться к tomcatсервер приложений через подключение к веб-сокетам через балансировщик нагрузки.
  2. Веб-клиент может отправить сообщение / уведомление другому клиенту, подключенному к другому серверу приложений tomcat.
  3. Сообщения сохраняются в базе данных и публикуютсяк теме / разделу kafka, которые могут использоваться соответствующими веб-клиентами / пользователями.
  4. Kafka можно масштабировать для многих брокеров с большим количеством потребителей.

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

Я считал, что балансировка нагрузки на сервере приложений может работать, регистрируя пользователей с определенным ключом маршрутизации (пользователиначинается с «A» и т. д.) на конкретном сервере приложений, затем только потребление сообщений для пользователей начинается с «A» на этом сервере приложений. Но кажется, что это будет трудно поддерживать и очень затруднит автоматическое масштабирование. Кажется, что это должен быть распространенный сценарий для реализации, но я не могу найти какие-либо инструменты или подходы, подходящие для этого сценария.

1 Ответ

0 голосов
/ 15 октября 2019

Похоже, что каждый потребитель должен жить в своей собственной группе потребителей. Таким образом, все доступные потребители будут использовать все сообщения, отправленные в тему. Поэтому все подключенные клиенты веб-сокетов будут получать уведомления с этими сообщениями.

Если вам требуется более сложная логика для этих сообщений после их использования, например фильтрация, маршрутизация, преобразование, агрегирование и т. Д., Вам следует подумать о привлеченииИнтеграция Spring в ваш проект: https://spring.io/projects/spring-integration

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...