我正在为提供聊天服务的移动客户端实现一个后端,其中包括为用户提供多个聊天室。(使用Spring启动)
我决定使用Kafka进行聊天消息的订阅和发布,因为我无法将STOMP与Spring Webflux(我选择代替Servlet)一起使用。
根据我的计划,聊天消息的交换是通过以下过程进行的。 (假设
Clients A and B
在同一个聊天室中。)
client A
通过WebSocket连接到chat server 1
。client B
通过WebSocket连接到chat server 2
。chat server1 and 2
订阅Kafka topic 'chat'
client A
将聊天消息发送到chat server 1
。chat server1
首先将聊天消息存储到DB,然后将消息发布到Kafka topic 'chat'
。邮件包含聊天室ID,聊天内容,发件人ID。chat server2
收到来自Kafka主题“聊天”的消息。chat server2
的client B
过滤器消息。chat server2
将经过过滤的邮件发送到client B
。我的问题是
我担心这不是通常的方式。普通人做什么?
答案 0 :(得分:0)
我认为如果您进行大型群聊,即使理论上可以做到,Kafka 也不会很好地扩展。如果你理解 kafka 是正确的,每个消费者需要一个副本分区到消费者独占,这意味着你需要很多分区(冗余)用于聊天消息。我不认为这是理想的。此外,您还需要集成 IM 应用程序的系统的其他部分。但是,肯定有解决方法。例如,单个消费者到整个群聊。