【发布时间】: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