我被问到一个问题来实现系统的扩展。系统本身处理客户数据,并在这些数据上创建过滤,并生成一些分析信息。
1)第一次迭代:
我最初的回答是提供一个Kafka集群解决方案。
Kafka本身具有流媒体、负载均衡和容错能力。因此,它为我提供了在许多代理中有效地创建、处理生产数据并在任何消费者中按我所需使用这些数据的能力。
我还可以随心所欲地为过滤数据添加流功能。
在这个场景中,不需要考虑负载均衡器,因为Kafka自己处理负载均衡。
2)第二次迭代:有人问我,如果有巨大的需求增长,我该如何扩展系统。扩展系统的方法是什么?
在这种情况下,在考虑Kafka集群时,应该在开始时描述broker计数和分区。它本身并不是扩张的东西。因此,尽管Kafka在考虑多个位置和快速增加的请求时提供了很大的灵活性,但我的第二个意见是使用弹性负载均衡器&数据中心的自动绑定。
当请求数在第二天翻倍时。负载均衡器将负载路由到其他负载均衡器/其他数据中心,因此在必要的情况下,新的Kafka集群会自动连接到整个系统。
主要负载路由可以在地理位置上完成。
这个问题的重点是负载均衡器看起来仍然需要,尽管Kafka是如此强大的候选者。
我的第二种方法类似于下面的模式。
https://i.stack.imgur.com/kEx1C.jpg
(在此期间,我在这次面试之前遇到过一些面试官,他们准确地将负载均衡器命名为“过时的技术”,我被评判为非常残酷,因为我建议使用负载均衡器。)
如果你是一位Kafka专家&在多个位置处理不断增加的请求,我很高兴你能发表你的评论。
谢谢。
发布于 2020-02-06 07:41:35
使用Kafka的负载平衡将会遇到问题,因为客户端本身将创建多个到Kafka代理的连接,可能会绕过您的代理。在启动时,客户端(生产者/消费者)向bootstrap.servers发送Metadata请求,以确定集群的外观。当您在Java客户机中打开跟踪/调试日志级别时,可以详细地观察到这一点。
另一方面,网状级的解决方案将需要协议支持,例如,类似这样的事情正在发生在特使- https://github.com/envoyproxy/envoy/issues/2852中
发布于 2020-02-06 07:22:44
虽然您可以将TCP负载均衡器放在Kafka代理的前面,但这只会造成另一个故障点,并且IMO是没有意义的,因为客户端必须直接向分区领导者发送请求,而负载均衡器没有这样的上下文。
HAProxy或Nginx并没有“过时”。你需要说这句话的人说得更清楚些
如果消息产量增加,则可以调整Kafka消费者设置以处理背压。只有当代理接近硬件限制时,才应该添加更多资源(不仅仅是在负载高峰期间)
发布于 2021-04-16 02:00:47
如果您的客户端是内部客户端,您可以在不使用任何支持外部客户端的接口(例如HTTP上的公共客户端)的情况下逃脱,因此您不需要任何ALB或API网关。但是,如果您需要支持外部客户端,则使用负载均衡器进行路由或引导繁忙的流量可能是最明智的策略。您可以将负载直接交给lambda,它负责处理,或者您可以将其转储到Kafka中进行“扇出”(多个消费者处理消息)。这将取决于负载、用例和可重播性。
https://stackoverflow.com/questions/60083370
复制相似问题