【问题标题】:Using Kafka Streams just as a state store in a Kafka Consumer App将 Kafka Streams 用作 Kafka Consumer App 中的状态存储
【发布时间】:2019-07-14 17:35:06
【问题描述】:

我目前正在使用 Spring Kafka Consumer API 开发 Spring Boot 应用程序。

我收到的关于某个主题的每条消息都需要转换为一种新的对象类型,其中包含来自其他主题的附加属性。目前,这些其他主题尚未开发,我们正在使用内存数据的模拟版本来处理请求。

例如,一个新的“购物订单”消息到达,但我使用模拟的“客户”对象和模拟的“项目”对象来处理订单。计划是使用真实的客户主题和真实的项目主题。

此外,目前,该应用程序只是用于获取新订单的 Spring Kafka 侦听器。侦听器调用一个 spring bean 方法,该方法处理订单并创建一个新对象,该对象使用我上面提到的相同模拟写入另一个名为 customer-order 的输出主题。

我们目前正在考虑改进此应用程序的架构。我一直在阅读 Kafka 流。我在网上阅读的有关流的文档仅采用简单的示例,例如字数、连接等。由于我对流的了解有限,我不打算使用诸如计算总数等功能。

我已经想到了一些架构选项...

  1. 我计划保留消费者 API,即使用 Spring 侦听器实现来接收新的订单消息,同时使用流依赖来创建最终将替换模拟数据的状态存储。这个想法是模拟数据最终将来自其他主题。因此,在这种方法中,Kafka 的“流”部分将仅用于创建状态存储,而不用于处理传入记录。
  2. 使用纯粹的 Kafka 消费者 API 并使用 API 调用来获取我的主题之外的数据。这是一个不太受欢迎的选项,因为我不想为每个新订单进行外部 API 调用。
  3. 使用 Kafka Streams 来读取新的传入订单以及收集和存储状态。此外,利用连接和合并来处理数据。

你有什么建议? 1,2 还是 3?将 Streams 用于这种解决方案是个好主意吗?将此实现迁移到使用 Kafka 流式传输有什么好处吗?还是我留在 2. 处更好?

【问题讨论】:

标签: java spring spring-boot apache-kafka apache-kafka-streams


【解决方案1】:

数字 1 对我来说听起来很奇怪。您可以让 KafkaStreams 应用程序通过 Interactive Queries 公开状态存储,但这看起来更像是 2。您还必须考虑如何部署实例并确保 Spring 部分和 KafkaStreams 之间的共同分区部分。

我认为完全在 Kafka Streams 中执行此操作没有任何问题,除非您有一些非常复杂的逻辑无法使用当前 API 实现,如果得知您无法实现,我会感到惊讶。实际上,您所描述的内容听起来像是它的常用应用程序(需要注意的是不知道其他要求,例如时间、预期数量等)。

好处:

  • 它在消费和生产上创建了一个抽象层。例如,通过使用您提到的 join,像 Order-Consumer 丰富之类的东西听起来很好用。
  • 消除了部署应用程序的复杂性 - 它使用与 Kafka Brokers 相同的分区分配和重新平衡方案。您可以无缝添加/删除处理实例。
  • 它比其他流处理器库更简单,但在大多数情况下就足够了(如果您需要更多 DIY 的东西,除了 DSL 之外,您还拥有处理器 API。
  • 发展速度。一旦掌握了它的基本知识(这并不难),您就可以很快开始编写应用程序,因为您专注于逻辑。
  • 文档得到了很好的照顾。

缺点:

  • 它是一个 JVM 库,但您似乎已经在使用 Java。
  • 必须学习一个新的范例——尽管它实际上很简单。与其他流处理库非常相似,而且绝对更简单。
  • 它与 Kafka 相关联(实际上是其中的一部分)。如果您要将基础设施移开,您可能必须使用不同的流处理器。
  • 根据您的使用案例,尤其是其复杂性,您可能会发现其他流媒体平台更有利(例如 Spark 或 Flink 仅举两个例子)。
  • 它相当成熟,但可能还不够成熟,例如火花。它正在变得越来越好,不过,你有 Confluent 的人在努力。

这不是一个完整的列表,但它是我脑海中最重要的几点。

【讨论】:

    猜你喜欢
    • 2021-11-21
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2021-01-04
    • 2017-06-08
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多