Websocket 将消息从Kafka路由到连接到应用程序服务器群集的web套接字客户端

Websocket 将消息从Kafka路由到连接到应用程序服务器群集的web套接字客户端,websocket,apache-kafka,spring-kafka,Websocket,Apache Kafka,Spring Kafka,我想找出将消息从Kafka路由到连接到负载平衡的应用程序服务器集群的web套接字客户端的最佳方法。我知道SpringKafka有助于消费消息并将消息发布到kafka主题,但在连接到分布式kafka主题时,这在负载平衡的应用程序服务器场景中是如何工作的。以下是我希望满足的要求,总体目标是在用户量非常非常大的应用程序中促进对等消息传递: Web客户端可以通过负载平衡器通过Web套接字连接连接到tomcat应用程序服务器 Web客户端可以向连接到不同tomcat应用服务器的另一个客户端发送消息/通知

我想找出将消息从Kafka路由到连接到负载平衡的应用程序服务器集群的web套接字客户端的最佳方法。我知道SpringKafka有助于消费消息并将消息发布到kafka主题,但在连接到分布式kafka主题时,这在负载平衡的应用程序服务器场景中是如何工作的。以下是我希望满足的要求,总体目标是在用户量非常非常大的应用程序中促进对等消息传递:

  • Web客户端可以通过负载平衡器通过Web套接字连接连接到tomcat应用程序服务器
  • Web客户端可以向连接到不同tomcat应用服务器的另一个客户端发送消息/通知
  • 消息保存在数据库中,并发布到kafka主题/分区,相应的web客户端/用户可以使用该主题/分区
  • 卡夫卡可以扩展到许多经纪人和许多消费者
  • 我可以看到如何在单个应用程序服务器中非常容易地实现这一点,其中消费者使用来自kafka主题的所有消息,并通过spring消息传递/WebSocket重新分发。但我不知道这在负载平衡的应用服务器场景中是如何工作的,在这种场景中,每个应用服务器上都有消费者,形成了kafka主题的整体消费者组。假设每个应用程序服务器都在使用kafka主题的子集/分区,那么它们如何知道其预期收件人连接到哪个服务器?即使他们知道收件人连接到哪个服务器,他们如何通过WebSocket将邮件发送给他们


    我认为应用服务器负载平衡可以通过将具有特定路由密钥的用户(用户以“a”等开头)记录到特定的应用服务器上,然后仅使用该应用服务器上以“a”开头的用户的消息来实现。但这似乎很难维护,并且会使自动缩放变得非常困难。这似乎是一个需要实现的常见场景,但我找不到任何适合此场景的工具或方法。

    听起来每个消费者都应该生活在自己的消费群体中。这样,所有可用的使用者都将使用发送到主题的所有消息。因此,所有连接的websocket客户端都将收到这些消息的通知

    如果您需要更复杂的逻辑来处理这些消息
    在消费之后,例如过滤、路由、转换、聚合等,你应该考虑在项目中加入Spring集成:

    谢谢你花时间用一个可行的解决方案来回答我的问题。我对每个消费者消费发送到主题的所有消息的唯一犹豫是,这会在一定程度上限制横向可伸缩性。我知道在消息量非常大之前,这不会是一个问题,但我希望有一个没有任何横向可伸缩性瓶颈的设计。我不熟悉spring集成,但是谢谢你的建议——我会看一看。