Я хотел бы выяснить, как лучше всего перенаправлять сообщения от Kafka на клиенты веб-сокетов, подключенные к кластеру серверов приложений с балансировкой нагрузки. Я понимаю, что spring-kafka облегчает потребление и публикацию сообщений в теме kafka, но как это работает в сценарии сервера приложений с балансировкой нагрузки при подключении к теме распределенной kafka. Вот требования, которые я хотел бы удовлетворить, с общей целью облегчения обмена сообщениями между равноправными узлами в приложении с очень и очень большим количеством пользователей:
- Веб-клиенты могут подключаться к tomcatсервер приложений через подключение к веб-сокетам через балансировщик нагрузки.
- Веб-клиент может отправить сообщение / уведомление другому клиенту, подключенному к другому серверу приложений tomcat.
- Сообщения сохраняются в базе данных и публикуютсяк теме / разделу kafka, которые могут использоваться соответствующими веб-клиентами / пользователями.
- Kafka можно масштабировать для многих брокеров с большим количеством потребителей.
Я вижу, как это можетбыть реализовано довольно легко в едином сервере приложений сценарий , где потребитель потребляет все сообщения из темы кафки и перераспределяет через весенние сообщения / веб-сокеты. Но я не могу понять, как это будет работать в сценарии сервера приложений с балансировкой нагрузки, когда на каждом сервере приложений есть потребители, формирующие общую группу потребителей для темы kafka. Предполагая, что каждый из серверов приложений использует подмножества / разделы раздела kafka, как они узнают, к какому серверу подключены их предполагаемые получатели? И даже если бы они знали, к какому серверу подключены их получатели, как они могли бы направить им сообщение через веб-сокеты?
Я считал, что балансировка нагрузки на сервере приложений может работать, регистрируя пользователей с определенным ключом маршрутизации (пользователиначинается с «A» и т. д.) на конкретном сервере приложений, затем только потребление сообщений для пользователей начинается с «A» на этом сервере приложений. Но кажется, что это будет трудно поддерживать и очень затруднит автоматическое масштабирование. Кажется, что это должен быть распространенный сценарий для реализации, но я не могу найти какие-либо инструменты или подходы, подходящие для этого сценария.