1,主要验证了一下flink on zeppelin checkpoint的这个功能,临时写了个案例去测试一下。
2,首先我们知道正常的checkpoint恢复取消的任务,我们需要在脚本里面指定路径,这个我之前博客有写,直接贴官网的案例:
https://ci.apache.org/projects/flink/flink-docs-release-1.11/zh/ops/state/checkpoints.html
3,不知道大家是不是这样子,如果在一些集群环境运行。我们的任务需要重启,需要登录服务器,重新上传jar包,再执行脚本,非常的繁琐。
还好 Flink提供了web端上传jar执行命令,这个真的好用:
我们上传jar ,然后指定主类,需要传入的参数,并行度。代码里面已经指定了checkpoint的路径,第一次执行不需要指定。然后提交任务:
代码如下:
package com.test import java.util.Calendar import org.apache.flink.api.common.restartstrategy.RestartStrategies import org.apache.flink.api.common.state.{ValueState, ValueStateDescriptor} import org.apache.flink.api.common.time.Time import org.apache.flink.api.scala.typeutils.Types import org.apache.flink.contrib.streaming.state.RocksDBStateBackend import org.apache.flink.runtime.state.StateBackend import org.apache.flink.streaming.api.environment.CheckpointConfig import org.apache.flink.streaming.api.functions.KeyedProcessFunction import org.apache.flink.streaming.api.functions.source.{RichSourceFunction, SourceFunction} import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.api.{CheckpointingMode, TimeCharacteristic} import org.apache.flink.util.Collector import scala.collection.immutable import scala.util.Random /* * todo 测试 * senv 是zeppelin的写法,目前要统一。 * com.test.CheckpointCancelTest */ object ZeppelinCheckpointCancelTest { def main(args: Array[String]): Unit = { val senv: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment senv.setParallelism(1) senv.setStreamTimeCharacteristic(TimeCharacteristic.EventTime) //设置时间模式为事件时间 senv.enableCheckpointing(60000l) //1分钟做一次checkpoint val checkpointConfig = senv.getCheckpointConfig checkpointConfig.setCheckpointingMode(Chec