[英]Apache Kafka - Load-Balancing between Consumers consuming only from a specific partition
[英]Spring Kafka : Load Balancing between Consumers inside Kubernetes
关于在 Kubernetes 中部署的 SpringBoot Kafka 应用程序以及如何负载平衡的小问题,请问。
背景:我曾经有一个非常简单的 SpringBoot Web 应用程序,通过 http 公开,只是做一个相当复杂和冗长的计算。
@RestController
public class HelloHttp {
@Autowired BusinessService businessService;
@GetMapping("/business")
public String veryComplicatedAndTimeConsumingBusinessLogic(@RequestBody String request) {
return businessService.veryComplicatedAndTimeConsumingBusinessLogic(request);
}
随着这个网络应用程序越来越受欢迎,越来越多的客户在使用它,我们决定将它容器化,并将其部署在 Kubernetes (AWS) 中。 我们使用 Kubernetes 部署/副本集创建了 5 个副本。 然后我们创建了一个 Kubernetes 服务类型的负载均衡器,就像变魔术一样,我们可以看到请求在 5 个副本之间进行负载均衡。 意思是,一个 pod 将处理一个请求,然后另一个 pod 将处理下一个请求,等等......
发生了一些组织变化,而不是客户端发送请求 http 样式,他们现在都将有效负载放在 Kafka 中。 (问题不在于这种选择的合法性)。
然后,我们使用 Spring Kafka 将这个 Web 应用程序迁移到如下所示:
public class HelloKafka {
@Autowired BusinessService businessService;
@KafkaListener(topics = "businessTopic")
public void veryComplicatedAndTimeConsumingBusinessLogic(String message) {
businessService.veryComplicatedAndTimeConsumingBusinessLogic(message);
}
我们只知道 Kafka 主机,主题(没有关于消费者组的信息?)
尽管如此,就像魔术一样,在单个实例上,我们可以看到应用程序使用来自 Kafka 的消息并处理它们。
由于负载仍然相同,我们决定再次在 Kubernetes 中部署相同的负载,使用部署 + 副本集 + 服务类型 Load Balancer。
然而,很奇怪的是,我们根本没有观察到负载均衡机制。
请问我错过了什么吗?
谢谢
没有关于消费者群体的信息?
你自己定义。 groupId
是@KafkaListener
的参数。
我们根本没有观察负载平衡机制
这不是 Kubernetes 的问题。 Kafka 消费者不“分配负载”。 相反,同一消费者组中的所有消费者(同样,您设置的东西)都被分配到主题中的各个分区。
所以,要么
groupId
,它可能由 Spring 自动生成,并且每个实例都在读取所有分区这种选择的合法性
Kafka 通常被认为比带或不带副本的 HTTP 服务器具有更高的可用性。 它充当缓冲区以防止针对这些端点的 DOS 攻击。 另外,您可能不需要 HTTP 与纯 TCP 的开销。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.