首页 > 解决方案 > Spring Cloud Kafka Streams 与 Spring Cloud Stream 之间的区别?

问题描述

Spring Cloud Kafka Streams Vs Spring Cloud Stream Vs Spring Cloud Function Vs Spring AMQP和Spring for Apache Kafka有什么区别?

标签: apache-kafkaspring-cloud-stream

解决方案


Spring for Apache Kafka 和 Spring AMQP 是分别为 Apache Kafka 和 AMQP 编写 Spring 友好应用程序的基础库。它们提供模板、消息侦听器容器等设计模式,以及与较低级别的中间件系统交互的大量其他机制。这些库不需要 Spring Boot,但 Spring Framework 是最不常用的。换句话说,您可以使用这些库编写仅具有 Spring Framework 上下文的传统 Spring 应用程序。

Spring Cloud Function 是一个库,它是 Spring Cloud 组合项目的一部分。这用作 Spring Boot 应用程序的一部分。它为编写涉及各种范式的应用程序提供了一致的编程模型,例如请求-响应 (HTTP)、事件驱动 (pub-sub)、流处理 (pub-sub/streaming)、反应式流等。编程模型在应用程序级别是通过 Java 8 功能模型 - 例如,您可以将业务逻辑编写为java.util.function.Function<?, ?>. Spring Cloud Function 不与任何中间件或其他此类技术耦合。

Spring Cloud Stream 是另一个 Spring Cloud 项目,专为事件驱动和流处理用例构建。因为这是一个 Spring Cloud 项目,所以它需要作为 Spring Boot 应用程序的一部分使用。Spring Cloud Stream 的最新版本建立在 Spring Cloud Function 提供的基础之上。这本质上是一个目标绑定框架,允许您提供目标 - 例如 Kafka 主题或 RabbitMQ 交换。Spring Cloud Stream 将为应用程序绑定这些目的地。核心 Spring Cloud Stream 没有任何中间件依赖项。这就是活页夹实现的用武之地。

Spring Cloud Stream 提供了两种 Kafka binder -spring-cloud-stream-binder-kafkaspring-cloud-stream-binder-kafka-streams. 第一个是 binder 实现,它为编写常规 Kafka 生产者和消费者提供编程模型支持。在大多数情况下,您可以使用同一个应用程序并提供另一个活页夹(例如spring-cloud-stream-binder-rabbit),它应该可以工作(前提是应用程序进行了正确的配置更改)。这是因为绑定器关注的是与中间件通信的低级细节,而不是应用程序本身。应用程序可以主要关注手头的业务逻辑。Spring Cloud Stream 中的 Kafka Streams binder 是专门为使用 Kafka Streams 编写流式应用程序而构建的 binder implementation。两个 Kafka binder 实现都在底层使用 Spring for Apache Kafka。

Spring Cloud Stream 中的 rabbit binder 在内部使用 Spring AMQP。

总结一下:

  • Spring for Apache Kafka/Spring AMQP - 较低级别的基础库,不需要 Spring Boot。
  • Spring Cloud Function - 提供 Java 8 函数式编程模型的 Spring Cloud 项目,与 Spring Boot 应用程序一起使用。
  • Spring Cloud Stream - 使用 Spring Cloud Function 的事件驱动应用程序框架。与 Spring Boot 应用程序一起使用。
  • Spring Cloud Stream Kafka/Kafka Streams - 使用 Spring for Apache Kafka 的 Spring Cloud Stream binder 实现. 与 Spring Boot 应用程序一起使用。

推荐阅读