当前位置: 首页 > 知识库问答 >
问题:

Kafka流中的内存与持久状态存储?

尹钱青
2023-03-14

我已经阅读了有状态流处理概述,如果理解正确的话,RocksDB被用作键值存储的默认实现的主要原因之一是这样一个事实,即与内存中的集合不同,它可以处理大于可用内存的数据,因为它可以刷新到磁盘。这两种类型的存储都可以在应用程序重新启动时幸存下来,因为数据是作为Kafka主题备份的。

但还有其他不同吗?例如,我注意到我的持久状态存储为每个主题分区创建了一些。log文件,但它们都是空的。

简而言之,我想知道用内存中的存储替换持久存储有什么性能优势和可能的风险。

共有1个答案

葛阳华
2023-03-14

我对Kafka流的内部和状态存储的不同用例的理解非常有限。内存中与持久化之间的关系,但是到目前为止我所学到的是,持久化状态存储是存储在磁盘上的StreamTask的状态存储(因此称为持久化)。

这并没有给出太多的答案,因为内存中与持久化的名称本身可能给出了相同的理解,但当我了解到Kafka Streams试图将分区分配给以前分配过分区的相同的Kafka Streams实例时(重新启动或崩溃),我觉得非常令人耳目一新。

也就是说,在每次重新启动之前,只需重新创建(重播)内存中的状态存储,这在Kafka Streams应用程序启动和运行之前需要时间,而持久状态存储是已经在磁盘上具体化的东西,Kafka Streams实例重新创建状态存储的唯一时间是从磁盘加载文件(而不是从changelog主题加载文件,这需要更长时间)。

我希望这能有所帮助,如果我错了(或部分正确),我会很高兴被纠正。

 类似资料:
  • 我有一个像下面这样的用例。对于每个传入的事件,我希望查看某个字段,看看它的状态是否从a变为B,如果是,则将其发送到输出主题。流程是这样的:一个带有键“xyz”的事件以状态A进入,一段时间后另一个带有键“xyz”的事件以状态B进入。 有没有更好的方法使用DSL来编写这个逻辑? 上面代码中关于聚合创建的状态存储的两个问题。 null 提前道谢!

  • 我试着把我的头缠绕在Kafka的溪流和一些根本的问题,我似乎无法解决,我自己。我理解和Kafka状态存储的概念,但我很难决定如何实现它。我还在使用Spring Cloud Streams,这在此基础上增加了另一个层次的复杂性。 我的用例: 一些有状态规则如下所示: 我当前的实现将所有这些信息存储在内存中,以便能够执行分析。由于显而易见的原因,它不容易扩展。所以我想我会坚持到Kafka的州立商店。

  • 我在试图通过Kafka流实现以下目标时遇到了一些困难: 在应用程序启动时,(压缩的)主题α被加载到键值StateStore中 Kafka流从另一个主题中消费,使用上面的映射(get),并最终在主题alpha中生成一个新记录 结果是,即使拖缆重新启动,内存中的映射也应与底层主题对齐 我的方法如下: 装载机Treamer(store): : ...但是我得到的是: 试图获取存储处理程序时。 你知道如何

  • 我正在开发使用Spring Cloud Stream构建的Kafka Streams应用程序。在这个应用程序中,我需要: 使用可在以后检索的连续消息流。 保留与某些条件匹配的邮件 ID 列表。 在单独的线程中,运行一个计划程序,该计划程序定期读出消息 ID,检索与这些 ID 匹配的相应消息,并对这些消息执行操作。 从列表中删除已处理的消息 ID,以便不重复工作。 我已考虑如下实施: < li >将

  • 全局状态存储与普通状态存储有何不同? 全局状态存储是否在不同机器上运行的所有实例中都有数据副本?由于全局状态存储不使用任何更改日志主题进行恢复,因此在重新启动时它的行为在我的场景中全局存储的源主题没有键。

  • Java:OpenJdk 11Kafka:2.2.0Kafka流库:2.3.0 我试图在docker容器中部署我的Kafka streams应用程序,但在尝试创建带有TopicAuthorizationException的内部状态存储时失败。它在本地运行良好。本地和服务器上的主要区别在于,它连接到部署了Kafka的服务器,并使用常见的Kerberos身份验证进行身份验证。我无法理解身份验证与本地商