Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Kafka Streams State Stores是否是处理大量密钥和数据的有状态应用程序的有效解决方案?_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

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

Apache kafka Kafka Streams State Stores是否是处理大量密钥和数据的有状态应用程序的有效解决方案?,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我试图确定Kafka Streams state stores是否适合解决此问题: 一个主题将接收超过20000个不同键的数据 对于流中的每个密钥,我需要在状态存储中保留12个条目,每年每月一个,例如密钥1: 对于20k个键,我将在状态存储中保留240k个键值对。我知道我可以水平扩展Kafka Streams应用程序来分发信息,但是: 卡夫卡很适合这个问题吗 如何确定每个Kafka Streams实例所需的RAM内存量 如何确定每个Kafka Streams实例RocksDB所需的磁盘空间

我试图确定Kafka Streams state stores是否适合解决此问题:

  • 一个主题将接收超过20000个不同键的数据
  • 对于流中的每个密钥,我需要在状态存储中保留12个条目,每年每月一个,例如密钥1:
对于20k个键,我将在状态存储中保留240k个键值对。我知道我可以水平扩展Kafka Streams应用程序来分发信息,但是:

  • 卡夫卡很适合这个问题吗
  • 如何确定每个Kafka Streams实例所需的RAM内存量
  • 如何确定每个Kafka Streams实例RocksDB所需的磁盘空间量
  • 是否有任何指导原则来确定处理此负载的大量副本
更新

仅作几点澄清:

  • 我将使用交互式查询按键访问信息,如上所示,它由streamkey+month组成

  • 我确实在处理数据。与每个键关联的值是每月聚合数据的结果:数据在一天中连续到达,并存储为月平均值。我需要保存过去12个月的数据

  • 我认为副本也是负载的一个因素,因为Kafka在它们之间分配ID,所以状态存储中的所有键/值也在它们之间分配,从而减少每个实例的内存需求,对吗

  • 卡夫卡很适合这个问题吗

    它可以用于存储,但是,您没有提到所需的查询访问

    如何确定每个Kafka Streams实例所需的RAM内存量?如何确定每个Kafka Streams实例RocksDB所需的磁盘空间量

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

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

    是否有任何指导原则来确定处理此负载的大量副本


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

    Redis或其他数据库有什么问题?您可以配置RocksDB将使用多少内存。本指南可能会有所帮助:好的,显然需要交互式查询,但如果您同时访问多个键、所有键或一次只访问一个键,则这并不能解决问题。Kafka可以存储数年的数据,假设您像任何其他服务器一样适当地监控磁盘使用情况。当然,复制可能会导致负载,但这不是主要的驱动因素,因为其他所有主题都有可能被复制。我可能需要获得年度结果,所以12个关键点。kstreams应用程序正在Kubernetes上运行,正如您所指出的,rocksdb在磁盘中而不是内存中,默认容器存储是否足够,或者是否需要以某种方式进行配置?您必须使用PVC,这样您就不会在我的环境GKE中使用“默认容器存储”Mmm,这是一个问题,因为pvc只能作为ReadWriteOnce安装。也就是说,所有副本都将共享一个卷,所有副本都无法在该卷上写入。由于rocksdb数据不需要持久化(它将由更改日志主题重新创建),因此我希望依赖默认容器磁盘空间。。。
    --------------------------------------------------------
    |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        |
    --------------------------------------------------------