Apache flink ProcessWindowFunction中的Apache Flink状态
我试图理解ProcessWindowFunction中可以使用的各种状态的差异 首先,ProcessWindowFunction是一个AbstractRichFunctionApache flink ProcessWindowFunction中的Apache Flink状态,apache-flink,Apache Flink,我试图理解ProcessWindowFunction中可以使用的各种状态的差异 首先,ProcessWindowFunction是一个AbstractRichFunction abstract class ProcessWindowFunction[IN, OUT, KEY, W <: Window] extends AbstractRichFunction {...} 获得状态 getRuntimeContext().getState 此外,WindowProcessFunc
abstract class ProcessWindowFunction[IN, OUT, KEY, W <: Window]
extends AbstractRichFunction {...}
获得状态
getRuntimeContext().getState
此外,WindowProcessFunction的处理函数
def process(key: KEY, context: Context, elements: Iterable[IN], out:
Collector[OUT]) {}
有一个上下文,其中有两个方法允许我获取状态:
/**
* State accessor for per-key and per-window state.
*/
def windowState: KeyedStateStore
/**
* State accessor for per-key global state.
*/
def globalState: KeyedStateStore
以下是我的问题:
1) 这些与getRuntimeContext().getState有什么关系
2) 我经常使用自定义触发器实现和GlobalWindow。在本例中,使用getPartitionedState检索状态。我是否可以访问WindowProcessFunction中定义的窗口状态以及trigger函数中定义的窗口状态?如果是,怎么做
3) 触发器类中没有要重写的打开方法,如何处理状态创建?只调用getPartitionedState安全吗?getPartitionedState也管理状态创建
getRuntimeContext().getState
调用相当于ProcessWindowFunction.Context的globalState
。两者都是“全局”状态,而不是windowState
的“窗口”状态。“全局”表示状态在具有相同密钥的所有窗口中共享<代码>窗口状态
在每个窗口中都是独立的,即使对于同一个键也是如此。请记住,即使是“全局”状态也不会在不同的键之间共享TriggerContext#getPartitionedState()
和ProcessWindowFunction.Context#globalState()
指向同一件事org.apache.flink.table.runtime.triggers.StateCleaningCountTrigger
):是的,getPartitionedState()
应该处理状态的创建,如果它以前没有创建过/**
* State accessor for per-key and per-window state.
*/
def windowState: KeyedStateStore
/**
* State accessor for per-key global state.
*/
def globalState: KeyedStateStore