Apache flink 读取表中的所有条目,并仅在Flink中将其保存到MapState一次

Apache flink 读取表中的所有条目,并仅在Flink中将其保存到MapState一次,apache-flink,flink-streaming,flink-sql,flink-statefun,Apache Flink,Flink Streaming,Flink Sql,Flink Statefun,我有一个表元数据 我想在我的Flink应用程序中使用表的内容。因此,我想读取表中的所有条目并保存到MapState 若我的应用程序重新启动,我不想从表中读取,而是从MapState中读取并使用它 有什么方法可以做到这一点吗?我在中链接的youtube视频和github repo涵盖了许多类似的场景。但是引导Flink状态的最佳方法是使用将数据预加载到保存点 请记住,Flink的MapState是一种键分区状态。因此,如果使用MapState,这实际上是一个Map,它通过键在集群中分片 下面的示例

我有一个表
元数据

我想在我的Flink应用程序中使用表的内容。因此,我想读取表中的所有条目并保存到
MapState

若我的应用程序重新启动,我不想从表中读取,而是从
MapState
中读取并使用它


有什么方法可以做到这一点吗?

我在中链接的youtube视频和github repo涵盖了许多类似的场景。但是引导Flink状态的最佳方法是使用将数据预加载到保存点

请记住,Flink的
MapState
是一种键分区状态。因此,如果使用
MapState
,这实际上是一个
Map
,它通过键在集群中分片

下面的示例演示如何创建包含
ValueState
的保存点:

公共类引导{
公共静态void main(字符串[]args)引发异常{
执行环境=
getExecutionEnvironment();
自举变换=
运算符转换.bootstrapWith(bEnv.fromElements(1,2,3))
.keyBy(字符串::valueOf)
.transform(新的SimplestTransform());
保存点
.create(新建fsstatebend(“file:///tmp/checkpoints"), 256)
.withOperator(“我的运算符uid”,转换)
.写(”file:///tmp/savepoints/");
execute();
}
静态公共类SimplestTransform
扩展KeyedStateBootstrapFunction{
价值状态;
@凌驾
公共无效打开(配置参数){
ValueStateDescriptor描述符=新建
ValueStateDescriptor(“总计”,Types.INT);
state=getRuntimeContext().getState(描述符);
}
@凌驾
公共void processElement(整数值,上下文ctx)引发异常{
状态更新(值);
}
}
}
这将创建一个分片键/值映射,其中包含
{“1”:1,“2”:2,“3”:3}