【问题标题】:What is the difference between spring-kafka and Apache-Kafka-Streams-Binder regarding the interaction with Kafka Stream API?关于与 Kafka Stream API 的交互,spring-kafka 和 Apache-Kafka-Streams-Binder 有什么区别?
【发布时间】:2021-11-11 08:31:41
【问题描述】:

我的理解是,spring-kafka 是为了与 Kafka 客户端 API 交互而创建的,后来,spring-cloud-stream 项目是为了“构建高度可扩展的事件驱动微服务与共享消息系统”,并且这个项目包括几个绑定器,其中一个是允许与 Kafka Stream API 交互的绑定器:

spring-cloud-stream-binder-kafka-streams

所以我很清楚,如果我想与 Kafka Stream API 交互,我将使用带有适当绑定器的 spring-cloud-stream 方法。

但是,我发现您也可以使用 spring-kafka 方法与 Kafka Stream API 进行交互。
需要以下两个依赖项。一个例子是here

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

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

【问题讨论】:

  • Spring Cloud Stream 是更高级别的抽象(两个 binder 都在下面使用 spring-kafka)。它提供了自以为是的配置默认值、自动配置主题等。而且,除了使用 Kafka Streams 时,它还允许您轻松切换传输(例如,使用 RabbitMQ 而不是 Kafka)。使用 Kafka Streams 时,它不是那么灵活,因为您仍在使用 Streams API。

标签: spring apache-kafka spring-kafka spring-cloud-stream spring-cloud-stream-binder-kafka


【解决方案1】:

正如 Gary 在上面的 cmets 中指出的那样,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 对象。 Binder 还允许您组合各种功能。函数模型主要来自 Spring Cloud Function,但它适用于 binder 实现中的 Kafka Streams。简短的回答是 spring-Kafka 和 Spring Cloud Stream Kafka Streams binder 都可以工作,但 binder 提供了与 Spring Cloud Stream 一致的编程模型和额外功能,而 spring-kafka 提供了各种低级构建块。

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2017-12-01
    • 2018-01-19
    • 2018-12-07
    • 2018-04-28
    相关资源
    最近更新 更多