checkpoint常用配置
flink常用参数
checkpoint.interval=60000
#checkpoint.path=hdfs://node02:9000/chk
checkpoint.path=file:///D:\al\yjxxt-lzj\chk
kafka.input.topics=accessyjx
kafka.input.main=ordermain
kafka.input.detail=orderdetail
bootstrap.servers=node01:9092,node02:9092,node03:9092
auto.offset.reset=earliest
group.id=yxj-lzj
isolation.level=read_committed
amap.http.url=http://restapi.amap.com/v3/geocode/regeo
amap.key=51ea4a2c6b682d670a5e9968368bf3f00
clickhouse.batch.size=5
clickhouse.batch.interval=5000
检查点保存目录可以在flink-conf.yml文件中进行全局配置也可以对某个应用进行单独配置
//yml中的配置是全局的,即每个应用都用这个路径
state.checkpoints.dir: hdfs:///checkpoints/
env.enableCheckpointing(chkInterval, CheckpointingMode.EXACTLY_ONCE);
//在代码中对某个应用进行配置,这其实就是在设置状态后端
env.setStateBackend(new FsStateBackend(chkPath));
env.setStateBackend(new RocksDBStateBackend("hdfs:///checkpoints-data/"));
检查点配置项详解
package it.kenn.checkpoint;
import org.apache.flink.streaming.api.CheckpointingMode;
import org.apache.flink.streaming.api.environment.CheckpointConfig;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
/**
* checkpoint 测试
*/
public class CKDemo {
public static void main(String[] args) {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//参数为生成checkpoint的时间,以及CheckpointingMode,默认为EXACTLY_ONCE,一般采用默认就可以,如果任务有超低延时需求,可以使用至少一次
env.enableCheckpointing(1000, CheckpointingMode.AT_LEAST_ONCE);
//设置检查点模式也可以使用下面方式
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.AT_LEAST_ONCE);
//设置超时时间,超时时间是说,这个检查点设置了,但是过去500ms还没有完成就认为这个检查点超时了,然后把这个检查点终止,也就是不再使用这个检查点了
env.getCheckpointConfig().setCheckpointTimeout(500);
/**设置检查点尝试之间的最小间隔。此设置定义检查点协调器在可能触发另一个检查点(相对于最大并发检查点数)后多久可以触发另一个检查点
* 比如下面的设置,下一个检查点将在上一个检查点完成后,不超过5s内启动
* 这个参数跟检查点生成的间隔时间是有点冲突的,这个参数不考虑上面提到的检查点持续时间和检查点间隔。或者说设置下面的参数以后,检查点自动就变成5s了,
* 如果觉得5s不够可以再将间隔设置的大一点,但是不能小于5s了
* 设置检查点的interval和设置检查点之间的间隔时间有啥不同呢?
* interval是物理时间的间隔,即时间只要过去1s了,就会生成一个检查点。但是设置检查点之间的间隔是说检查点完成1s了就会设置间隔,这个是跟检查点完成时间相关的
* 比如存储检查点的系统比较慢,完成一个检查点平均10s,然后下面检查点之间的间隔设置为5s,那么两个检查点生成的时间间隔就是15s
* 再简单点说,interval设置的是两个检查点生成时刻的间隔,而下面参数设置的是第一个检查点结束和第二个检查点创建(还没有结束)之间的间隔
**/
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(5000);
//设置检查点最大并发数.比如设置为1,表示只能有一个检查点,当这个检查点完成以后才有可能产生下一个检查点。这也是默认参数。如果定义了上面的设置,则不能再定义这条设置项
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
//设置外部检查点。可以将检查点的元数据信息定期写入外部系统,这样当job失败时,检查点不会被清除。这样如果job失败,可以从检查点恢复job。这条很重要,下面一节会详细说明
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
//检查点和保存点都可以用于容灾,这个配置是说如果有一个时间更近的保存点,我也不用,而更加愿意使用检查点进行容灾
env.getCheckpointConfig().setPreferCheckpointForRecovery(true);
//设置使用非对齐检查点。它可以极大减少背压情况下检查点的时间,但是只有在精确一次的检查点并且允许的最大检查点并发数量为1的情况下才能使用
env.getCheckpointConfig().enableUnalignedCheckpoints();
}
}
本文来自博客园,作者:mlzheng,转载请注明原文链接:https://www.cnblogs.com/mlzheng/articles/17211530.html

浙公网安备 33010602011771号