关于状态存储的 Kstream 成本与 KTable 成本

Cost of Kstream Vs cost of KTable with respect to the state store

我试图更好地了解如何为 运行 我的 Kafka-Stream 应用程序设置集群。我正在尝试更好地了解将涉及的数据量。

在这方面,虽然我可以很快看出 KTable 需要状态存储,但我想知道从主题创建 Kstream 是否立即意味着将该主题的所有日志显然仅以追加方式复制到状态存储中我想是时尚。也就是说,特别是如果我们想公开查询流?

当数据在源主题中移动时,Kafka 是否会自动复制状态存储中的数据,当它是 Kstream 时?如上所述,由于更新,这对于 Ktable 来说听起来很明显,但对于 Kstream,我只想确认发生了什么。

每当调用任何有状态操作或窗口流时都会创建状态存储。

你说得对,KTable 需要状态存储。 KTable 是变更日志流的抽象,其中每条记录代表一个更新。在内部,它是使用 RocksDB 实现的,其中所有更新的值都存储在状态存储和变更日志主题中。在任何时候,状态存储都可以从更新日志主题中重建。

虽然KStream有不同的概念,它代表了对记录流的抽象,具有append-only格式的无界数据集。它在阅读源主题时不会创建任何状态存储。

除非您想查看更新的变更日志,否则可以使用 KStream 而不是 KTable,因为它可以避免创建不需要的状态存储。与 KStreams 相比,KTables 总是很昂贵。这也取决于你想如何使用数据。

如果要公开流以供查询,则需要将流具体化到状态存储中。