Kafka Stream App何时清理状态存储库?

时间:2019-08-27 15:33:07

标签: apache-kafka apache-kafka-streams

我有一个kafka流应用程序,该应用程序当前仅在5分钟的时间内加入两个KStreams,并将合并结果写入另一个topic

由于我在一个时间段内加入了两个topics,因此我的应用程序将具有与其相关联的状态。我的印象是,每隔5分钟窗口就会删除我应用程序中的状态存储(因为我的应用程序只关心5分钟的加入状态事件窗口)。

我期望磁盘空间利用率恒定。但是,似乎并非如此。已经12个小时了,我看不到国营商店正在清理。它一直在增长。

所以我对此有很多担忧,

  1. Kafka Streams应用程序何时清除其状态?
  2. 如果我的应用程序在kafka流应用程序集群中出现故障,并且我启动了另一台主机并使其加入集群,则在重新平衡之后,磁盘中是否存在孤立的状态存储,用于重新平衡的分区?
  3. 我的理解是,仅当事件在定义的窗口中发生时才加入事件,因此,为什么kafka需要保留状态存储中早于定义的窗口周期的数据?

让我知道您是否需要我的其他有关我的流应用的信息。我当前正在运行kafka-streams版本2.2.1,而我的经纪人也使用同一版本。

1 个答案:

答案 0 :(得分:0)

  

Kafka Streams应用程序何时清除其状态?

状态的大小取决于保留期,默认情况下为1天。

Atm,无法更改KStream-KStream联接的保留期限-添加此功能已经是WIP:https://issues.apache.org/jira/browse/KAFKA-8558

  

如果我的应用程序在kafka stream应用程序集群中出现故障,并且我又启动了另一台主机并使其加入集群,则在重新平衡之后,磁盘中是否存在孤立的状态存储,用于重新平衡的分区?

是的。但是,如果在可配置(state.cleanup.delay.ms)时间段后未重用该状态,则将清除该状态(如果在已恢复的主机上重新启动Kafka Streams)。

  

我的理解是,仅当事件在定义的窗口中发生时才加入事件,那么,为什么卡夫卡需要保留状态存储中早于定义的窗口时间段的数据?

保留期更长,您的窗口大小允许Kafka Streams处理乱序数据。请注意,Kafka Streams使用事件时间语义,而不是处理时间语义。