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持久状态存储与内存中状态存储_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka Kafka持久状态存储与内存中状态存储

Apache kafka Kafka持久状态存储与内存中状态存储,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我们正面临一个问题,即我们正在使用kafka持久状态存储,并且它的空间经常不足(8gb),因此我们正在考虑转移到内存中的状态存储 存储。persistenKeyValueStore(“名称”) 到 商店。inMemoryKeyValueStore(“名称”) 如果我们在内存中更改为,就没有什么问题了 如果代理/消费者重新启动,我们是否会丢失任何数据 消费者如何获取以前的数据?如果刷新内存中的旧数据,它是如何从代理获取数据的 如果它可以从代理中获取数据,这不是一个性能影响,因为它是一个网络调用,而

我们正面临一个问题,即我们正在使用kafka持久状态存储,并且它的空间经常不足(8gb),因此我们正在考虑转移到内存中的状态存储

存储。persistenKeyValueStore(“名称”)

商店。inMemoryKeyValueStore(“名称”)

如果我们在内存中更改为,就没有什么问题了

  • 如果代理/消费者重新启动,我们是否会丢失任何数据
  • 消费者如何获取以前的数据?如果刷新内存中的旧数据,它是如何从代理获取数据的
  • 如果它可以从代理中获取数据,这不是一个性能影响,因为它是一个网络调用,而不是在持久状态存储的情况下在本地获取数据
  • 切换到内存中是否还有其他缺点

    请注意,我们有流媒体应用程序(KTable),并且有大约200万条独特的消息

    每个味精的大小大约为2kb 平均频率500msg/秒

    空间不足(8gb),因此我们正在考虑转移到内存状态存储

    似乎切换到内存存储将是一种倒退?8GB也相当小--为什么有这么小的磁盘

    如果代理/消费者重新启动,我们是否会丢失任何数据

    不会。持久存储只是为了增加启动时间和保持更大状态(因为它们可能溢出到磁盘)的能力而进行的优化。持久存储和内存存储都由Kafka集群中的changelog主题支持,以实现容错。为了实现正确的容错,您需要对Kafka流应用相同的配置,以及独立于存储类型的changelog主题

    消费者如何获取以前的数据?如果刷新内存中的旧数据,它是如何从代理获取数据的

    如果使用内存存储,则客户端始终保存数据集的完整副本。因此,您的数据集必须适合主内存。对Kafka群集的写入仅用于容错。在正常操作期间,Kafka只将数据流写入changelog主题。只有在迁移任务并且需要重建存储时,才会读取更改日志主题

    切换到内存中是否还有其他缺点

    如上所述,缺点是: -您失去了滚动重启的本地状态,需要从changelog主题“增加启动时间”中恢复状态
    -您的状态必须适合主内存

    您的意思是,如果流不能适合主内存,它将无法工作?我们的主内存是32g,如果状态超过32g,它不是像lru缓存之类的吗?它会清理一些数据并加载当前数据,当需要旧数据时,它会从changelog主题(而不是本地状态存储,以防持久化)
    您的意思是,如果流不能装入主内存,它将无法工作?
    --正确。没有LRU或类似的机制——如果使用内存存储,则所有数据都必须装入主内存。这就是Kafka Streams在默认情况下使用持久存储的原因——允许处理更大的状态。