Apache flink 在执行流之前,是否有方法通过编程检查Flink流作业是否从保存点启动?

Apache flink 在执行流之前,是否有方法通过编程检查Flink流作业是否从保存点启动?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,在StreamExecutionEnvironment上调用execute并启动流作业之前,是否有方法通过编程确定作业是否从保存点还原?我需要知道这些信息,以便在构建作业图时根据它设置卡夫卡源的偏移量 似乎FlinkConnectorKafkaBase类具有方法InitializeEstate可以访问此类信息()。但是,无法截取函数InitializationContext并检索isRestored()值,因为InitializationEstate是一种最终方法。另外,initializeSt

StreamExecutionEnvironment
上调用
execute
并启动流作业之前,是否有方法通过编程确定作业是否从保存点还原?我需要知道这些信息,以便在构建作业图时根据它设置卡夫卡源的偏移量

似乎
FlinkConnectorKafkaBase
类具有方法
InitializeEstate
可以访问此类信息()。但是,无法截取
函数InitializationContext
并检索
isRestored()
值,因为
InitializationEstate
是一种
最终方法。另外,
initializeState
方法在执行作业图后被调用,因此我认为没有可行的解决方案与之相关


我做的另一个尝试是找到一个Flink作业参数,该参数指示作业是否从保存点启动。但是,我认为不存在这样的参数。

您只需执行以下操作即可获得想要的效果:

FlinkKafkaConsumer<String> myConsumer = new FlinkKafkaConsumer<>(...);
myConsumer.setStartFromEarliest(); 
flinkkafaconsumer myConsumer=新的flinkkafaconsumer(…);
myConsumer.setStartFromEarliest();
如果使用setStartFromEarliest,则Flink将忽略存储在Kafka中的偏移量,而是从最早的记录开始读取。此外,即使使用SetStartFromEarlime,如果Flink正在从检查点或保存点恢复,它也将使用该快照中存储的偏移量

请注意,Flink有自己的卡夫卡偏移量管理,从检查点恢复时会忽略卡夫卡中存储的偏移量。Flink这样做是作为提供“精确一次”保证的一部分,这需要确切地知道有多少输入被消耗,以产生在检查点或保存点捕获的其余状态中呈现的结果。因此,Flink总是将偏移量存储为每个状态快照(检查点或保存点)的一部分

这是有文件记录和记录的


至于您最初关于
initializeState
的问题,如果您实现
CheckpointedFunction
接口,这是可用的,但实际上很少需要它。

嘿,谢谢您的回答。。。问题是在构造作业拓扑并执行作业后调用了
initializeState
。在创建作业图时,我需要在调用
execute
启动作业之前了解这些信息,因为在作业执行之后,没有办法更改作业运算符的配置。您实际想做什么?通常情况下,保存点包含卡夫卡偏移量以及作业图其余部分的相应状态就足够了。从卡夫卡读取的Flink作业,如果未传入检查点,我尝试使作业重置其偏移量以从头开始读取,如果传入,则使作业继续使用卡夫卡组偏移量。另外,卡夫卡偏移量不存储在检查点中,而是由卡夫卡存储和跟踪。谢谢您的帮助。