首页 > 解决方案 > 是否可以在 Kakfa Streams 中使用相同的状态存储来创建“快速”队列和“慢速”队列?

问题描述

我们有一系列对消息执行操作的 Kafka Streams 应用程序。这些应用程序有状态存储。

客户记录通过应用程序提供,并通过使用状态存储中的数据进行丰富。状态存储是从其他来源更新的。

我们的系统有两种类型的异步“入口点”。

Batch:批量 接收大量记录,读入流中进行处理

API: 单个记录被送入要处理的流中,并更新可以通过 API 查询的投资组合(但仅在准备好时)

当前系统

要求: 我们希望允许同步 API 调用。即客户端可以通过API发送消息,它将通过流处理并同步返回(并且显然足够快以成为API)。这不适用于当前系统,因为显然单个消息可能会“卡”在大批量后面并需要一段时间才能处理。

我们尝试了什么: 我们希望做的一个想法是有一个快速和慢速队列。相同的应用程序,但它们的两个部署。我们可以做到这一点,但问题是每个应用程序部署都需要自己的状态存储,这意味着我们将所有数据复制到多个状态存储中,即使它们是相同的主题(大量数据使这变得不那么明智且成本更高) )

理想情况下,我们可以使用同一个状态存储来部署同一个应用程序的两个部署,但我们认为这在 Kafka 流中是不可能的?

如果您将状态存储视为数据库表,那么从逻辑上讲,我不明白为什么两个应用程序不能访问同一个“表”,但也许我在这里遗漏了一些基本的东西。

理想场景

问题: 我们如何使用同一系统解决“批量”和“实时”问题?如果答案是……“你不应该”,请给出在我看来这是有道理的理由。谢谢你的帮助!

标签: apache-kafkaapache-kafka-streams

解决方案


推荐阅读