【问题标题】:Kafka Streams - Best way to do lookups in remote store via interactive queries?Kafka Streams - 通过交互式查询在远程存储中进行查找的最佳方式?
【发布时间】:2020-11-10 19:29:45
【问题描述】:

我有点困惑,我想澄清一下。我有一些我正在做的事情。我希望有一个 Kafka Streams 拓扑,它将有五个独立的 KStreams 从各自的主题中读取数据并将这些数据转储到一个大型的整体主题中。接下来,我将有一个 GlobalKTable,它将从该单一主题中读取并实现一个全局存储,假设称为 lookupStore。我想让这个物化的全局存储基本上作为其他 Kafka Streams 应用程序的“查找”表。我已经阅读了一些关于使用具有 application.server 配置的 RPC 层公开这一点的内容,该配置将以一些独特的 host:port 的形式出现。

现在我希望有许多单独的微服务,每个微服务都是 Kafka Streams 应用程序,它们将处理来自 KStream 的事件,然后通过交互式查询在 lookupStore 上进行查找。例如,.filter() 操作基于对 lookupStore 的查找是否返回值。所以这是我的困惑......假设我在host:port 上对暴露的RPC 层进行了硬编码,我如何专门查询lookupStore 来查询它。如果这是在同一个拓扑/本地实例中,您可以执行类似 lookupStore.get("key")... 但如何在远程 Kafka Streams 实例中执行此操作?

或者连接到那个 RPC 层是否会将该状态存储暴露给远程应用程序,以便它“知道”它,并且您可以像查询本地实例一样查询 lookupStore?这是可行的还是我走错了路?

【问题讨论】:

  • 通常,您将使用 KafkaStreams API 使用您自己的 RPC 层(例如 REST、GRPC)来发现和查询远程 Kafka Streams 实例。也许这个项目可以为您节省一些时间,因为它提供了查询您的 State Stores 的内置支持:azkarrastreams.io

标签: apache-kafka apache-kafka-streams


【解决方案1】:

如果您的微服务(流式应用程序)与主流式应用程序(生成 GlobalKTable)共享相同的 Kafka 集群,则它们可以访问对应于同一应用程序的 Table 主题并执行 KTable join 或 lookupStore.get("钥匙”)。此外,由于延迟,不建议在流应用程序中执行远程 API 调用来进行查找。如果两个 Kafak 集群不同,那么您可以探索使用镜像制造商之类的工具来复制主题(GlobalKTable 和 State Store 更改日志主题)。

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2020-12-02
    • 2012-06-08
    • 1970-01-01
    相关资源
    最近更新 更多