【发布时间】:2019-07-14 17:35:06
【问题描述】:
我目前正在使用 Spring Kafka Consumer API 开发 Spring Boot 应用程序。
我收到的关于某个主题的每条消息都需要转换为一种新的对象类型,其中包含来自其他主题的附加属性。目前,这些其他主题尚未开发,我们正在使用内存数据的模拟版本来处理请求。
例如,一个新的“购物订单”消息到达,但我使用模拟的“客户”对象和模拟的“项目”对象来处理订单。计划是使用真实的客户主题和真实的项目主题。
此外,目前,该应用程序只是用于获取新订单的 Spring Kafka 侦听器。侦听器调用一个 spring bean 方法,该方法处理订单并创建一个新对象,该对象使用我上面提到的相同模拟写入另一个名为 customer-order 的输出主题。
我们目前正在考虑改进此应用程序的架构。我一直在阅读 Kafka 流。我在网上阅读的有关流的文档仅采用简单的示例,例如字数、连接等。由于我对流的了解有限,我不打算使用诸如计算总数等功能。
我已经想到了一些架构选项...
- 我计划保留消费者 API,即使用 Spring 侦听器实现来接收新的订单消息,同时使用流依赖来创建最终将替换模拟数据的状态存储。这个想法是模拟数据最终将来自其他主题。因此,在这种方法中,Kafka 的“流”部分将仅用于创建状态存储,而不用于处理传入记录。
- 使用纯粹的 Kafka 消费者 API 并使用 API 调用来获取我的主题之外的数据。这是一个不太受欢迎的选项,因为我不想为每个新订单进行外部 API 调用。
- 使用 Kafka Streams 来读取新的传入订单以及收集和存储状态。此外,利用连接和合并来处理数据。
你有什么建议? 1,2 还是 3?将 Streams 用于这种解决方案是个好主意吗?将此实现迁移到使用 Kafka 流式传输有什么好处吗?还是我留在 2. 处更好?
【问题讨论】:
-
交叉发布为 Jira 票证:issues.apache.org/jira/browse/KAFKA-7971
标签: java spring spring-boot apache-kafka apache-kafka-streams