继续上面的 checkpoints 和 savepoints.........我在这里解释一下,我现在写这些其实都是看书上的,花钱买的书,不得好好吸收了么。所以在这里写博客,以前都是用有道云笔记,可每次写完都不看了,博客好啊~随时看,随时改,养成好习惯是不~~~
1,理解CheckPoints 检查点机制
Flink中基于异步轻量级的分布式快照技术提供了checkpoints容错机制,会间隔性的将同一时间点Task的状态数据全局同一快照处理,当应用出现异常的时候,可Operator就能够从上一次的快照中恢复所有算子之前的状态,从而保证数据的一致性。 最好的例子就是kafka 消费者中维护Offset状态。当系统出现问题无法从kafka中消费数据的时候,可以将offset记录在状态中,任务恢复的时候,从上一次记录开始消费。
在这里可能大家有疑问,感觉Flink这样子做很消耗性能,或者占用资源。 实际上不是的 ,这是要看应用程序状态是否多,一般不多的情况下,快照产生过程非常轻量,高频才渐渐对Flink的性能影响很小,checkpoint过程状态一般保存在HDFS上。
1)设置保存间隔
val env = StreamExecutionEnvironment.getExecutionEnvironment env.enableCheckpointing(1000L)
2)exactly-ance 和 at-least-once 语义选择
env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE) //适合对数据准确性高,不丢数据的情况跟数