Java 将Kafka Streams用作Kafka消费者应用程序中的状态存储
我目前正在使用SpringKafka消费API开发SpringBoot应用程序 我得到的每一条主题消息都需要转换成一种新的对象类型,并带有来自其他主题的附加属性。目前,这些其他主题尚未开发,我们正在使用内存中数据的模拟版本来处理请求 例如,新的“购物订单”消息到达,但我使用模拟的“客户”对象和模拟的“项目”对象来处理订单。计划是使用真实客户主题和真实项目主题 此外,目前,该应用程序仅用于获取新订单的SpringKafka侦听器。监听器调用一个Springbean方法,该方法处理订单并创建一个新对象,该对象将通过使用我上面提到的相同模拟写入另一个名为customer order的输出主题 我们目前正在考虑改进此应用程序的体系结构。我一直在读卡夫卡流。我在网上阅读的有关streams的文档仅举了一些简单的例子,如单词计数、连接等。由于我对streams的知识有限,我不打算使用诸如计算总数等功能 我已经想到了一些架构的选择Java 将Kafka Streams用作Kafka消费者应用程序中的状态存储,java,spring,spring-boot,apache-kafka,apache-kafka-streams,Java,Spring,Spring Boot,Apache Kafka,Apache Kafka Streams,我目前正在使用SpringKafka消费API开发SpringBoot应用程序 我得到的每一条主题消息都需要转换成一种新的对象类型,并带有来自其他主题的附加属性。目前,这些其他主题尚未开发,我们正在使用内存中数据的模拟版本来处理请求 例如,新的“购物订单”消息到达,但我使用模拟的“客户”对象和模拟的“项目”对象来处理订单。计划是使用真实客户主题和真实项目主题 此外,目前,该应用程序仅用于获取新订单的SpringKafka侦听器。监听器调用一个Springbean方法,该方法处理订单并创建一个新对
你有什么建议?1,2,还是3?在这种解决方案中使用流是一个好主意吗?将此实现移动到使用Kafka流媒体有什么好处吗?还是我最好和2呆在一起?我觉得1号听起来很奇怪。您可以让KafkaStreams应用程序通过交互式查询公开状态存储,但这看起来更像是2。您还必须考虑如何部署实例,并确保Spring部分和KafkaStreams部分之间的协同分区 我认为在Kafka Streams中完全实现它不会有任何问题,除非您有一些非常复杂的逻辑无法用当前API实现,我很惊讶地发现您不能。实际上,您所描述的内容听起来像是it的一个常见应用程序(需要注意的是,不知道其他需求,如时间、预期容量等) 好处:
- 它在消费和生产上创建了一个抽象层。例如,像Order Consumer enrichment这样的东西听起来很好地使用了它,正如您所提到的那样,它使用了join李>
- 消除了部署应用程序的复杂性—它使用了与Kafka代理相同的分区分配和重新平衡方案。您可以无缝地添加/删除处理实例
- 它比其他流处理器库更简单,但在大多数情况下,它已经足够了(如果您需要更多DIY内容,除了DSL之外,您还有处理器API)
- 开发速度。一旦你掌握了基本的it知识(这并不难),你就可以很快开始编写应用程序,因为你专注于逻辑
- 文档处理得很好
- 这是一个JVM库,但您似乎已经在使用Java了
- 必须学习一种新的范例——尽管它实际上非常简单。而且与其他流处理库非常相似,而且肯定更简单
- 它与卡夫卡有关(实际上是卡夫卡的一部分)。如果您要将infra移开,可能需要使用不同的流处理器
- 根据您的用例,尤其是其复杂性,您可能会发现其他流媒体平台更为有利(例如Spark或Flink,仅举两个例子)
- 它相当成熟,但可能比Spark要少。它正在变得更好,不过你有人在做它
这不是一个全面的列表,但它是我脑海中最重要的一点。第一点听起来很奇怪。你可以让KafkaStreams应用程序通过交互式查询公开状态存储,但这看起来更像是第二点。你还必须考虑如何部署实例并确保-Spring部分和KafkaStreams部分之间的分区 我不认为完全在Kafka Streams中实现它有任何问题,除非您有一些非常复杂的逻辑无法用当前API实现,我很惊讶地发现您不能实现。实际上,您所描述的听起来像是一个普通的应用程序(需要注意的是,不知道其他需求,如时间、预期容量等) 好处:
- 它在消费和生产上创建了一个抽象层。例如,通过使用您提到的连接,Order Consumer enrichment听起来是一个很好的使用它的方法
- 消除了部署应用程序的复杂性—它使用与Kafka代理相同的分区分配和重新平衡方案。您可以无缝地添加/删除处理实例
- 它比其他流处理器库更简单,但在大多数情况下,它已经足够了(如果您需要更多DIY内容,除了DSL之外,您还有处理器API)
- 开发速度。一旦你掌握了it的基本知识(这并不难),你就可以很快开始编写应用程序,因为你