将 apache kafka 与 spring 云 netflix 堆栈一起使用

using apache kafka with spring cloud netflix stack

目前我正在使用 spring 云 Netflix 堆栈来开发我的基于微服务的应用程序。我在其中使用了 Netflix 堆栈提供的不同服务,例如

EUREKA : for service registration and discovery
ZUUL : for proxy gateway and
RIBBON : for load balancing

现在我们想使用 Apache kafka 进行微服务之间的相互通信,其中 kafka 将有我们的微服务订阅的不同主题, 现在真正的问题从这里开始是负载平衡、代理网关和尤里卡将如何在这里工作。

few questions I have in mind which are really confusing me are
1. how ribbon load balancing will work here, since while using HTTP we are using @loadbalanced restTemplate but now this will not be the case.
2. how service calls will be distributed among different instances of a same service
3. whether Zuul and Eureka are needed here or we just need to ignore these and go with kafka load balancing and service discovery through topics.

我搜索了一下,但没有找到满意的答案,如果这里的任何专家可以帮助我,我将不胜感激,如果有任何类似的问题也可以提供帮助。

提前致谢。

对于您的上述用例,如果您打算使用 kafka 进行微服务间通信,则不需要任何 spring-cloud-netflix 组件。您可以发布到主题并让微服务中的消费者从主题中消费。负载平衡将根据主题中的分区数自动发生。

例如,假设您的主题名称是 test,它有 4 个分区。如果您部署了 4 个微服务,每个微服务都包含一个从主题测试中消费的 Kafka 消费者,那么每个消费者将从主题测试的 1 个分区中消费。所以,负载平衡会自动发生。

spring-cloud-netflix 组件主要用于微服务之间涉及网络调用时的微服务间通信。

例如- 让我们考虑两个应用程序 A 和 B 。您部署了 4 个应用程序 A 实例和 4 个应用程序 B 实例。系统消费者的入口点是应用程序 A。在这里,您将使用像 Zuul 这样的 Api 网关。至于 Eureka ,您将在其中注册部署的所有实例。当请求进入 Zuul 需要转发给应用程序 A 时。应用程序 A 的所有实例将从 Eureka 获取(在我们的例子中是 4 个),然后提供给负载均衡器 Ribbon,Ribbon 将选择应该调用哪个 url 。然后 Zuul 会将请求转发给应用程序 A 的那个实例。

您应该查看的一些链接是-

https://github.com/Netflix/zuul/wiki/How-it-Works

https://github.com/Netflix/ribbon/wiki/Working-with-load-balancers

https://blog.asarkar.org/technical/netflix-eureka/