将 apache kafka 与 Spring Cloud netflix 堆栈一起使用

Posted

技术标签:

【中文标题】将 apache kafka 与 Spring Cloud netflix 堆栈一起使用【英文标题】:using apache kafka with spring cloud netflix stack 【发布时间】:2018-11-23 06:54:23 【问题描述】:

目前我正在使用 Spring Cloud 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.

如果这里有任何专家可以帮助我,如果有任何类似的问题也可以提供帮助,我将不胜感激。

提前致谢。

【问题讨论】:

【参考方案1】:

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

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

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

例如—— 让我们考虑两个应用程序 A 和 B 。您部署了 4 个应用程序 A 实例和 4 个应用程序 B 实例。系统消费者的入口点是 Application A 。在这里,您将使用像 Zuul 这样的 Api Gateway。至于 Eureka ,您将在其中注册所有部署的实例。当一个请求进入 Zuul 需要转发到 Application 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/

【讨论】:

感谢@Indraneel Bende 此信息非常有用。但是我们同时使用 eureka infra 来注册/路由 rest 调用到微服务,然后微服务将写入 Kafka 主题以让其他微服务使用该消息。网关将帮助我们针对实例数量进行扩展和负载平衡,而 kafka 将帮助我们在消息处理和消费 API 之间进行扩展 好的,那你可以同时使用。对于需要通过网络调用进行通信的微服务,eureka、ribbon、hystrix 等组件很有用。如前所述,您还可以使用 Zuul 作为您的网关。 不用Zuul,也可以考虑用spring cloud gateway。这是你的选择。 cloud.spring.io/spring-cloud-gateway 内容丰富,非常感谢

以上是关于将 apache kafka 与 Spring Cloud netflix 堆栈一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Spring纯Java配置集成kafka

微服务架构 | 8.1 使用 Spring Cloud Stream 整合 Apache kafka #yyds干货盘点#

Spring Cloud Data Flow (SCDF) + Apache Kafka - 在哪里部署 Kafka 代理?

如何将 Apache Kafka 与 Amazon S3 连接?

Java Apache Kafka生产者元数据更新器和重试逻辑

Spring集成Kafka-注解,xml配置2种方式实现