spring-kafka 和 Apache-Kafka-Streams-Binder 在与 Kafka Stream API 交互方面有什么区别?

What is the difference between spring-kafka and Apache-Kafka-Streams-Binder regarding the interaction with Kafka Stream API?

我的理解是 spring-kafka was created to interact with Kafka Client APIs, and later on, spring-cloud-stream 项目是为“构建与共享消息系统连接的高度可扩展的事件驱动微服务”而创建的,该项目包括几个活页夹,其中之一是允许与 Kafka Stream API:

交互的活页夹
spring-cloud-stream-binder-kafka-streams

所以我很清楚,如果我想与 Kafka Stream API 交互,我将使用 spring-cloud-stream 方法使用适当的活页夹。

但是,我发现您可以与 Kafka Stream API 以及 spring-kafka[=31] 进行交互=]方法。
需要以下两个依赖项。一个例子是 here.

'org.springframework.kafka:spring-kafka'
'org.apache.kafka:kafka-streams'

所以我的问题是 - 如果这两种方法都允许与 Kafka Stream API 交互,那么这两种方法之间有什么区别?

正如 Gary 在上面的评论中指出的那样,spring-kafka 是较低级别的库,它为 Spring Cloud Stream Kafka Streams binder (spring-cloud-stream-binder-kafka-streams) 提供构建块。 binder 提供了一个编程模型,您可以使用该模型将 Kafka Streams 处理器编写为 java.util.funciton.Funcitonjava.util.function.Consumer。您可以有多个这样的函数,每个函数都将构建自己的 Kafka Streams 拓扑。在幕后,活页夹使用 Spring-Kafka 使用 StreamsBuilderFactoryBean 构建 Kafka Streams StreamsBuilder objet。 Binder 还允许您组合各种功能。功能模型主要来自 Spring Cloud Function,但它适用于 binder 实现中的 Kafka Streams。简短的回答是 spring-Kafka 和 Spring Cloud Stream Kafka Streams 活页夹都可以工作,但是活页夹提供了一个编程模型和与 Spring Cloud Stream 一致的额外功能,而 spring-kafka给出了各种低级构建块。