首页 > 解决方案 > Kafka 是否完全取代了负载均衡器?

问题描述

我被问到一个实现系统扩展的问题。系统本身处理客户数据并对该数据进行过滤并生成一些分析信息。

1)第一次迭代:

我最初的回答是提供一个 Kafka 集群解决方案。

Kafka 本身具有流式传输、负载均衡和容错能力。因此,它使我能够有效地处理许多代理中的生产数据,并根据需要在任何消费者中使用这些数据。

我还可以根据需要添加流功能来过滤数据。

在这种情况下,不需要考虑负载均衡器,因为 Kafka 自己处理负载均衡。

2)第二次迭代:有人问我,如果需求大幅增加,我该如何扩展系统。扩展系统的方法是什么?

在这种情况下,在考虑 Kafka 集群时;代理计数和分区应该在开始时描述。它不是扩展自身的东西。因此,尽管 Kafka 在考虑多个位置和快速增加的请求时提供了很大的灵活性,但我的第二个意见是使用弹性负载均衡器和数据中心的自动绑定。

当请求在第二天翻倍时。负载均衡器将负载路由到其他负载均衡器/其他数据中心,因此在必要时新的 Kafka 集群会自动连接到整个系统。

主要负载路由可以在地理上完成。

尽管 Kafka 是如此强大的候选者,但看起来仍然需要负载均衡器。

我的第二种方法类似于以下架构。

https://i.stack.imgur.com/kEx1C.jpg

(与此同时,我在这次面试之前遇到了一些面试官,他们准确地将负载均衡器称为“过时的技术”,并且因为我建议使用负载均衡器而被认为非常残酷。)

如果您是 Kafka 专家并且正在处理多地点不断增加的请求的扩展,如果您发表评论,我会很高兴。

谢谢。

标签: apache-kafkasystem-design

解决方案


使用 Kafka 进行负载平衡会遇到问题,因为客户端本身将创建到 Kafka 代理的多个连接,可能会绕过您的代理。在启动时,客户端(生产者/消费者)向引导程序发送元数据请求。服务器确定集群的外观。当您在 Java 客户端中打开跟踪/调试日志级别时,可以详细观察到这一点。

另一方面,网格级解决方案将需要协议支持,例如 Envoy 中正在发生这样的事情 - https://github.com/envoyproxy/envoy/issues/2852


推荐阅读