KTables如何获得它们的初始值?
How do KTables get their initial values?
我最近一直在研究 Kafka Streams API,但我在理解 KTables 方面遇到了一些困难。我想我理解了一般概念,但我正在努力解决一些细节问题。
在我的示例应用程序中,我获取了一堆价格,然后使用 Kafka Streaming API 将每个产品的平均价格生成到 compacted Kafka 主题( 主题-A)。我有第二个服务,我想对这些平均价格更新做出反应。所以在第二个服务中,我在 Topic-A 上创建了一个 KTable
,我可以成功查询它的商店。
我的目标是让第二个服务流程实时对这些平均价格做出反应,同时还能按需访问每个产品的最新价值。我相信我可以使用 KTable 和 Store 来做到这一点。
最初,我相信:
- KTable 由本地存储(RocksDB 实例)支持
- 初始化 KTable 时,它会使用整个 Topic-A 来构建其 KTable
但是,KTables 似乎(或可以?)得到 compacted change-log 的支持。
这是否意味着KTable在初始化时只需要为每个key消费最新的记录?
如果我 运行 我的第二个服务的多个实例,KTables 是否共享一个更改日志? 我想如果实例的数量被缩放up/down,实例需要更新其本地状态以说明来自 more/less 个分区的数据。
使用 GlobalKTable 会给我每个实例中可用的所有 K/V 对吗?
- Does this mean that upon initialization, the
KTable
only needs to consume the latest record for each key?
是的。如果底层主题中的数据是这样的,每个值代表该键的完整最新值,那么主题可以配置为 cleanup.policy=compact
并且 Kafka Streams 只需要读取最新值来恢复 KTable
(这是一个 RocksDB 存储)。在数据建模方面,这是您 want/makes 认为可以用作 KTable
.
的唯一一种 data/topic 类型
- If I run multiple instances of my second service do the
KTables
share a change log?
是的,他们从相同的变更日志主题中读取,但他们根据您在 Kafka Streams 配置中提供的 state.dir
参数生成自己的 RocksDB 存储。
- Would using a
GlobalKTable
give me all the K/V pairs available in each instance?
是的,但是 GlobalKTables
与常规 KTables
相比,您可以使用它们进行的操作略有限制。我相信新的 1.0.0 版本已经为 GlobalKTables
添加了功能,但它们仍然有一些限制。
我最近一直在研究 Kafka Streams API,但我在理解 KTables 方面遇到了一些困难。我想我理解了一般概念,但我正在努力解决一些细节问题。
在我的示例应用程序中,我获取了一堆价格,然后使用 Kafka Streaming API 将每个产品的平均价格生成到 compacted Kafka 主题( 主题-A)。我有第二个服务,我想对这些平均价格更新做出反应。所以在第二个服务中,我在 Topic-A 上创建了一个 KTable
,我可以成功查询它的商店。
我的目标是让第二个服务流程实时对这些平均价格做出反应,同时还能按需访问每个产品的最新价值。我相信我可以使用 KTable 和 Store 来做到这一点。
最初,我相信:
- KTable 由本地存储(RocksDB 实例)支持
- 初始化 KTable 时,它会使用整个 Topic-A 来构建其 KTable
但是,KTables 似乎(或可以?)得到 compacted change-log 的支持。
这是否意味着KTable在初始化时只需要为每个key消费最新的记录?
如果我 运行 我的第二个服务的多个实例,KTables 是否共享一个更改日志? 我想如果实例的数量被缩放up/down,实例需要更新其本地状态以说明来自 more/less 个分区的数据。
使用 GlobalKTable 会给我每个实例中可用的所有 K/V 对吗?
- Does this mean that upon initialization, the
KTable
only needs to consume the latest record for each key?
是的。如果底层主题中的数据是这样的,每个值代表该键的完整最新值,那么主题可以配置为 cleanup.policy=compact
并且 Kafka Streams 只需要读取最新值来恢复 KTable
(这是一个 RocksDB 存储)。在数据建模方面,这是您 want/makes 认为可以用作 KTable
.
- If I run multiple instances of my second service do the
KTables
share a change log?
是的,他们从相同的变更日志主题中读取,但他们根据您在 Kafka Streams 配置中提供的 state.dir
参数生成自己的 RocksDB 存储。
- Would using a
GlobalKTable
give me all the K/V pairs available in each instance?
是的,但是 GlobalKTables
与常规 KTables
相比,您可以使用它们进行的操作略有限制。我相信新的 1.0.0 版本已经为 GlobalKTables
添加了功能,但它们仍然有一些限制。