Kafka Streams State Stores 是处理大量密钥和数据的有状态应用程序的有效解决方案吗?

Are Kafka Streams State Stores a valid solution for stateful applications dealing with high volumes of keys and data?

我正在尝试确定 Kafka Streams 状态存储是否适合解决此问题:

--------------------------------------------------------
|STATE STORE KEY (key + year-month) | STATE STORE VALUE|
--------------------------------------------------------
|              1-2020-02            |       100.19     |
|              1-2020-01            |       12.0       |
|              1-2019-12            |       19.0       |
|                 ...               |       ...        |
|              1-2019-03            |       1.0        |
--------------------------------------------------------

如果有 20k 个键,我将在状态存储中保留 240k 个键值对。我知道我可以水平扩展 Kafka Streams 应用程序来分发信息,但是:

更新

简单说明一下:

  1. 我将使用交互式查询来按键访问信息,如上所示,它由流键+月份组成。

  2. 我确实在处理数据。与每个键关联的值来自每个月的聚合数据:数据在白天连续到达并存储为月平均值。我需要保留最近 12 个月的汇总。

  3. 我认为副本也是负载的一个因素,因为 Kafka 在它们之间分配了 id,所以状态存储中的所有 keys/values 也分布在它们之间,从而减少了内存需求例如,我说得对吗?

Is Kafka a good fit for this problem?

它将用于存储,但是,您没有提到所需的查询访问权限。

How can I determine the amount of RAM memory needed per Kafka Streams instance? How can I determine the amount of disk space needed for RocksDB per Kafka Streams instance?

听起来你只是在存储数据,而不是真正地处理它,而且持久状态存储在堆外,所以从默认堆大小开始并监视它...

关于存储,RocksDB 只是默认选项 - 您可以实现自定义状态存储提供程序。但是您可以确定字符串的 UTF8 大小和 double 中的字节数,以大致了解大小。

Any guidelines to determine a good number of replicas to deal with this load?

副本是可用性的一个因素,不一定是负载...从 3-5 个副本开始