тут все ок, когда пользователь неактивен, нотификации копятся, как только пользователь подключается нужно их сначала прочитать, затем подписаться на онлайн. Зоопарк да, но кафка не серебрянная пуля
Я так и хотел изначально сделать, но меня настораживают один момент. Во-первых, допустим, пользователь подключается, сервис идет в бд, забирает все события(момент времени А), отправляет клиенту, а затем подписыватся на очередь в Кафка или Redis или что-то еще(момент времени Б). Проблема в том, что между А и Б существует окно времени. Оно очень маленькое, но в это окно кто-то может заперсистить сообщения в бд, поскольку клиент еще не подписан, и получается оффлайн. В таком случае сообщения не будут доставлены. Это окно можно сильно уменьшить, но совсем избавиться мне не представляется как. Если только не блокировать всю таблицу на запись, что такое себе. Понятно, что вероятность такого события мала, но при возрастающей активности пользователей этого исключить нельзя, а когда это выстрелит, понять что именно произошло будет сложно.