Events ApacheFlink 1.6.0-StateTlConfig和ListState

Events ApacheFlink 1.6.0-StateTlConfig和ListState,events,apache-flink,ttl,stateful,Events,Apache Flink,Ttl,Stateful,我正在使用ApacheFlink 1.6.0实现一个概念验证流处理系统,并在ListState中存储一个按键划分的接收事件列表。(不要担心我为什么要这样做,在这里与我一起工作。)我在相应的列表statedDescriptor上设置了一个StateTtlConfig: “所有状态集合类型都支持每项TTL。这意味着列表元素和映射项将独立过期。” 当前,过期值只有在显式读取时才会被删除,例如通过调用ValueState.value() 问题1 以下哪项构成了对列表状态的读取: 请求迭代器但不使用它-m

我正在使用ApacheFlink 1.6.0实现一个概念验证流处理系统,并在
ListState
中存储一个按键划分的接收事件列表。(不要担心我为什么要这样做,在这里与我一起工作。)我在相应的
列表statedDescriptor
上设置了一个
StateTtlConfig

  • “所有状态集合类型都支持每项TTL。这意味着列表元素和映射项将独立过期。”
  • 当前,过期值只有在显式读取时才会被删除,例如通过调用
    ValueState.value()
  • 问题1

    以下哪项构成了对列表状态的读取:

  • 请求迭代器但不使用它-
    myListState.get()
  • 实际使用迭代器-
    for(MyItem i:myListState.get()){…}
  • 问题2

    “每项TTL”实际上是什么意思?具体来说,我想问的是:

    假设我有一个特定的
    ListState
    实例。描述符的TTL为10秒。我插入一个
    'a'
    。两秒钟后,我插入
    'b'
    。九秒钟后,我插入了
    'c'
    。如果我迭代此
    列表状态
    ,将返回哪些项目

    换言之:

    ListState<Character> ls = getRuntimeContext().getListState(myDescriptor);
    
    ls.add('a');
    
    // ...two seconds later...
    ls.add('b');
    
    // ...nine seconds later...
    ls.add('c');
    
    // Does this iterate over 'a', 'b', 'c'
    // or just 'b' and 'c'?
    for (Character myChar : ls.get()) { ... }
    
    ListState ls=getRuntimeContext().getListState(myDescriptor);
    ls.加入(‘a’);
    //…两秒钟后。。。
    ls.加入(‘b’);
    //…九秒钟后。。。
    ls.加入(‘c’);
    //这是否在“a”、“b”、“c”上迭代
    //或者只是“b”和“c”?
    对于(字符myChar:ls.get()){…}
    
    答案1

    答案是1。对于ListState,对
    myListState.get()进行修剪

    答案2

    “每个条目TTL”表示超时应用于单个条目,而不是整个集合。例如,假设在插入a后经过10秒读取时,它将在
    b
    c
    上迭代<代码>在这种情况下,将删除一个