Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/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
Kotlin 如何在ApacheFlink中使用TTL终止键控状态?_Kotlin_Apache Flink_Flink Streaming_Stream Processing - Fatal编程技术网

Kotlin 如何在ApacheFlink中使用TTL终止键控状态?

Kotlin 如何在ApacheFlink中使用TTL终止键控状态?,kotlin,apache-flink,flink-streaming,stream-processing,Kotlin,Apache Flink,Flink Streaming,Stream Processing,我有这样一条管道: env.addSource(kafkaConsumer) .keyBy{value->value.f0} .window(EventTimeSessionWindows.withGap(Time.minutes(2))) .reduce(::reduceRecord) .addSink(卡夫卡制作人) 我想用TTL使密钥数据过期 一些博客文章指出我需要一个valuestatescriptor来实现这一点。 我做了一个这样的: val desc=valuestatescrip

我有这样一条管道:

env.addSource(kafkaConsumer)
.keyBy{value->value.f0}
.window(EventTimeSessionWindows.withGap(Time.minutes(2)))
.reduce(::reduceRecord)
.addSink(卡夫卡制作人)
我想用TTL使密钥数据过期

一些博客文章指出我需要一个
valuestatescriptor
来实现这一点。 我做了一个这样的:

val desc=valuestatescriptor(“val state”,MyKey::class.java)
说明启用时间设置(ttlConfig)

但是,我如何将此描述符实际应用于我的管道,以便它实际执行TTL到期?

您描述的管道不使用任何键控状态,这将从设置状态TTL中受益。管道中唯一的键控状态是会话窗口的内容,该状态将在会话关闭时尽快清除。(此外,由于您使用的是reduce函数,因此每个键的状态仅包含一个值。)


在大多数情况下,过期状态只与显式创建的状态相关,在这种情况下,您可以随时访问状态描述符,并可以将其配置为使用状态TTL。Flink SQL确实会代表您创建可能不会自动过期的状态,在这种情况下,您需要使用来配置它。CEP库还代表您创建状态,在这种情况下,您应该确保您的模式最终匹配或超时。

密钥本身如何。车窗关闭后钥匙是否被清除?还是它永远存在?如果是这样的话,那么如果唯一的密钥不断地被添加到流中呢?这些密钥不是单独存储的。当键控状态被清除时,键/值对被清除,没有任何东西保留。我明白了。以下内容是否正确:在上面的管道代码中,假设我只得到一个带有键
x
和值
y
的事件。键
x
的会话在2分钟后关闭后,“x”和“y”都将从状态中删除,并且状态为空。听起来您明白,但要学究:一旦水印到达,表明至少有两分钟的间隔,在此期间
x
没有事件,将从状态中删除
x
y
。但是,州政府将保留任何用作关闭会话的水印的证据的事件。
x