Kafka流:Windows保留期对内存/性能的影响

时间:2018-06-29 07:14:36

标签: apache-kafka-streams

我们在kafka-streams中进行了一项开发,该开发产生了一种时间窗口聚合类型:

selectKey().groupByKey().aggregate()

然后使用

TimeWindows.of().until()

我的主要问题是,如果不使用until,会发生什么情况,假设我们有1分钟的窗口,并且由于某些不可预见的原因,从1周前开始有一个新事件发生,应用程序是否保存了来自一开始?它是否会产生过多的内存消耗,或者在持久化所有窗口状态的情况下,是否不认为会延迟相当长的时间来恢复适当的窗口?

1 个答案:

答案 0 :(得分:2)

我们最近遇到了同样的问题。可以在以下源文件中找到有关kafka流的答案:

https://github.com/apache/kafka/blob/1.1/streams/src/main/java/org/apache/kafka/streams/kstream/Windows.java

其中包含:

static final long DEFAULT_MAINTAIN_DURATION_MS = 24 * 60 * 60 * 1000L; // one day

因此,在不指定until()设置的情况下,默认情况下,您的窗口状态存储将保留一天(下限)的记录。

问题的另一部分是:在窗口过期之后,迟到的事件会发生什么?答案在开发人员指南中:

  

在Kafka Streams DSL用户中,可以为   窗口。这样一来,Kafka Streams可以保留旧的窗口时段,以便   为了等待其记录的延迟到达的时间段   时间戳落在窗口间隔内。如果之后有记录   保留期限已过,记录无法处理,并且   放下。

将这些信息组合在一起即可显示,如果您未在窗口流中指定until()设置,则记录将保留至少一天,而到来晚于一天的记录将被删除。