Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 在Kafka中将客户端从负载平衡器重定向到正确的使用者_Apache Kafka_Load Balancing_Message Queue_Kafka Consumer Api_Api Design - Fatal编程技术网

Apache kafka 在Kafka中将客户端从负载平衡器重定向到正确的使用者

Apache kafka 在Kafka中将客户端从负载平衡器重定向到正确的使用者,apache-kafka,load-balancing,message-queue,kafka-consumer-api,api-design,Apache Kafka,Load Balancing,Message Queue,Kafka Consumer Api,Api Design,我正在从事一个个人项目,在这个项目中,我希望能够从制作人向最终用户发送一条消息。 每条消息都有一个密钥,用于标识必须接收消息的用户。 这是我想象的整体结构: 我不知道如何告诉负载平衡器,例如,每当使用键2的用户联系负载平衡器时,我们都必须与使用键2的用户处理分区建立连接(可能使用WebSocket)。可能可以通过使用Kafka在必须为密钥分配分区时使用的相同技术,或者通过跟踪每个使用者管理的密钥来实现 我不知道这是否可能,但即使可能,我描述的技术可能会使代码与体系结构过于耦合 你能帮我解决这个问

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

我不知道如何告诉负载平衡器,例如,每当使用键2的用户联系负载平衡器时,我们都必须与使用键2的用户处理分区建立连接(可能使用WebSocket)。可能可以通过使用Kafka在必须为密钥分配分区时使用的相同技术,或者通过跟踪每个使用者管理的密钥来实现

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


你能帮我解决这个问题吗?我不想将消息存储在远程数据存储上,然后从随机消费者那里检索它们。我希望消费者能够在与用户建立连接时尽快为用户提供服务。如果与该用户没有连接,那么我可以存储消息并在连接就绪时发送。

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

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