【问题标题】:Redirecting client from load balancer to right consumer in Kafka将客户端从负载均衡器重定向到Kafka中的正确消费者
【发布时间】:2021-02-05 19:51:22
【问题描述】:

我正在从事一个个人项目,我希望能够从生产者向最终用户发送一条消息。 每条消息都有一个密钥,用于标识必须接收该消息的用户。
这是我想象的整体结构:

我不知道如何告诉负载均衡器,每当具有密钥 2 的用户联系负载均衡器时,我们必须与处理具有密钥 2 的分区的消费者建立连接(可能使用 WebSocket)在他们之中。可能可以通过使用 Kafka 在必须为密钥分配分区时使用的相同技术来完成某些事情,或者通过跟踪每个消费者管理的密钥来完成。

我不知道这是否可能,但即使是,我描述的技术可能会使代码与架构过于耦合。

您能帮我解决一下如何实现这一目标吗?我不想将消息存储在远程数据存储中并从随机消费者那里检索它们。我希望消费者能够在与用户建立连接时尽快为用户服务。如果与该用户没有连接,那么我可以存储消息并在连接准备好时发送它。

【问题讨论】:

  • 不清楚你将如何处理消费者群体再平衡......总的来说,听起来你应该使用 GlobalKTable
  • 感谢您的回答。我还没有考虑过重新平衡,但是如果我增加了分区的数量,并且有一种方法可以做我想要做的事情,那将不是问题。而对于GlobalKTable,我真的不明白应该怎么用
  • 我建议对 Kafka 的交互式查询功能进行一些研究,然后告诉我们是否可以解决您的问题
  • 我最终决定采用 Netflix 使用的推送消息技术。如果有人需要,请编辑我的答案
  • 您编辑了问题。欢迎您在下方给出答案

标签: apache-kafka load-balancing message-queue kafka-consumer-api api-design


【解决方案1】:

我最终发现他们在 Netflix 使用的 Push Messaging 技术很有用。诀窍是添加另一个间接级别,由 Web 服务器组成。每当新客户端连接到其中一个 Web 服务器时,元组 就会保存在外部数据存储中。当消费者需要将消息发送到具有该特定密钥的客户端时,它会在外部注册表中查找它以找到客户端连接的位置。一旦找到它,它就会将消息发送到正确的 Web 服务器,该服务器会将消息推送到客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2022-01-17
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多