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 状态存储是否适合解决此问题:
- 主题将接收具有超过 20000 个不同键的数据。
- 对于流中的每个密钥,我需要在状态存储中保留 12 个条目,一年中每个月一个,例如键 1:
--------------------------------------------------------
|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 应用程序来分发信息,但是:
- Kafka 适合这个问题吗?
- 如何确定每个 Kafka Streams 实例所需的 RAM 内存量?
- 如何确定每个 Kafka Streams 实例 RocksDB 所需的磁盘数量 space?
- 是否有任何准则来确定处理此负载的适当数量的副本?
更新
简单说明一下:
我将使用交互式查询来按键访问信息,如上所示,它由流键+月份组成。
我确实在处理数据。与每个键关联的值来自每个月的聚合数据:数据在白天连续到达并存储为月平均值。我需要保留最近 12 个月的汇总。
我认为副本也是负载的一个因素,因为 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 个副本开始
我正在尝试确定 Kafka Streams 状态存储是否适合解决此问题:
- 主题将接收具有超过 20000 个不同键的数据。
- 对于流中的每个密钥,我需要在状态存储中保留 12 个条目,一年中每个月一个,例如键 1:
--------------------------------------------------------
|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 应用程序来分发信息,但是:
- Kafka 适合这个问题吗?
- 如何确定每个 Kafka Streams 实例所需的 RAM 内存量?
- 如何确定每个 Kafka Streams 实例 RocksDB 所需的磁盘数量 space?
- 是否有任何准则来确定处理此负载的适当数量的副本?
更新
简单说明一下:
我将使用交互式查询来按键访问信息,如上所示,它由流键+月份组成。
我确实在处理数据。与每个键关联的值来自每个月的聚合数据:数据在白天连续到达并存储为月平均值。我需要保留最近 12 个月的汇总。
我认为副本也是负载的一个因素,因为 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 个副本开始