我可以使用Kafka聊天消息发布-订阅吗?

时间:2020-10-07 03:59:24

标签: apache-kafka chat publish-subscribe

我正在为提供聊天服务的移动客户端实现一个后端,其中包括为用户提供多个聊天室。(使用Spring启动)

我决定使用Kafka进行聊天消息的订阅和发布,因为我无法将STOMP与Spring Webflux(我选择代替Servlet)一起使用。

enter image description here 根据我的计划,聊天消息的交换是通过以下过程进行的。 (假设Clients A and B在同一个聊天室中。)

  1. client A通过WebSocket连接到chat server 1
  2. client B通过WebSocket连接到chat server 2
  3. chat server1 and 2订阅Kafka topic 'chat'
  4. client A将聊天消息发送到chat server 1
  5. chat server1首先将聊天消息存储到DB,然后将消息发布到Kafka topic 'chat'。邮件包含聊天室ID,聊天内容,发件人ID。
  6. chat server2收到来自Kafka主题“聊天”的消息。
  7. 已加入聊天室ID为chat server2
  8. client B过滤器消息。
  9. chat server2将经过过滤的邮件发送到client B

我的问题是

我担心这不是通常的方式。普通人做什么?

1 个答案:

答案 0 :(得分:0)

我认为如果您进行大型群聊,即使理论上可以做到,Kafka 也不会很好地扩展。如果你理解 kafka 是正确的,每个消费者需要一个副本分区到消费者独占,这意味着你需要很多分区(冗余)用于聊天消息。我不认为这是理想的。此外,您还需要集成 IM 应用程序的系统的其他部分。但是,肯定有解决方法。例如,单个消费者到整个群聊。