apache-kafka - 使用 apache kafka 和 Spring Cloud Netflix 堆栈

标签 apache-kafka microservices netflix-zuul netflix-eureka netflix

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

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

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

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 Consumer,那么每个消费者将从主题测试的 1 个分区进行消费。因此,负载平衡将自动发生。

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

例如 - 让我们考虑两个应用程序 A 和 B 。您部署了 4 个应用程序 A 实例和 4 个应用程序 B 实例。系统使用者的入口点是应用程序 A 。在这里,您将使用像 Zuul 这样的 Api 网关。至于 Eureka ,您部署的所有实例都将在其中注册。当请求进入 Zuul 并需要转发到应用程序 A 时。应用程序 A 的所有实例都将从 Eureka 获取(在我们的例子中为 4),然后提供给负载均衡器 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/

关于apache-kafka - 使用 apache kafka 和 Spring Cloud Netflix 堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50841501/

相关文章:

java - 如何处理多部分异常

java - 使用spring kafka在kafka消费者中手动提交偏移量的方法

apache-kafka - Kafka的日志目录应仅包含Kafka主题数据

docker - 获取使用 Docker Swarm 跨主机部署的微服务的指标

authentication - 在微服务架构中组织授权的最佳实践?

python - 从 Python 中删除现有 Pod 的简单方法

java - Spring-Kafka : Issue while deserialising kafka message - class not in a "trusted package"?

spark-streaming - 具有多个 Kafka 流的 Spark Streaming

java - 从数据库加载 netflix zuul 路由值

spring-boot - Spring Boot - 无法通过 Zuul 代理获得 Keycloak 授权 api 的响应