Всем привет! Поделитесь опытом, пожалуйста. У нас на проекте используется

Кафка, клиент на Java.
Есть задача отправлять эвенты клиентам по Server Sent Event. После подключения клиент должен получить все эвенты пока он был оффлайн, а затем продолжать получать сообщения, созданные после подключения.
Хочу реализовать следующим образом. Продюсеры, которые хотят уведомить клиента, отправляют сообщения в специальный топик. Когда клиент подключается, создаем нового Кафка консьюмера на основе id пользователя(каждый пользователь это отдельная консьюмер-группа), подписываемся на все партишены в топике. Затем запрашиваем батч сообщений из Кафки, отфильтровываем сообщения для клиента, отправляем их по SSE, затем фиксируем оффсет в Кафка и так до бесконечнеости. Если клиент отключается, то просто отписываемся от всех партишенов. Простой тест показал, что при 2 партишенах прочитать 1500 сообщений пользователя из 3 млн сообщений в топике одним консьюмером занимает примерно 1,5 - 2 мин, что не проходит по требованиям. Поэтому хочу увеличить количество портишенов(например, до 1024) У нас продюсеры роутят сообщения по ключу. Консьюмер будет делать предположение в каком партишене искать сообщения на основе ключа и подписываться только на этот партишен.

Есть такие вопросы:
1. Насколько плохо иметь большое количество консьюмеров с точки зрения Кафки. Допустим, их будет параллельно более 1000 на этот топик?
2. Вывезет ли Кафка такое количество партишенов и консьюмеров?
3. Есть в описанной схеме что-то что я не учел или можно сделать лучше?
4. В схеме с фиксированным количеством партишенов есть проблема, что нельзя будет их увеличить потом так, чтобы не потерять сообщения пользователя. Как бы это можно было бы решить?

4 ответов

12 просмотров

у меня вопрос - а Кафка вам тут зачем?

а что делать, если пользователь пришел через месяц, и его консьюмер группа уже отсутсвует?

как начсет того чтобы использовать кафка стримы и сообщения пользователей хранить в локальном стейте

мне кажется тут рисунок нужен

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта