首页
学习
活动
专区
圈层
工具
发布
49 篇文章
1
YARN
2
Hadoop前世今生
3
AI分类
4
人工智能综述
5
随机森林
6
【HBase】HBase之what
7
【HBase】HBase之how
8
HBase篇--HBase常用优化
9
Hbase优化
10
flink源码从头分析第一篇之WordCount DataStream操作
11
大数据Flink-Java学习之旅第一篇
12
flink(12)-flink on yarn
13
Flink学习——Flink概述
14
Flink学习笔记:2、Flink介绍
15
Flink学习笔记(2) -- Flink部署
16
Flink入门(一)——Apache Flink介绍
17
Flink1.4 Flink程序剖析
18
Flink SQL 优化实战 - 维表 JOIN 优化
19
flink sql 知其所以然(十四):维表 join 的性能优化之路(上)附源码
20
Flink重点难点:维表关联理论和Join实战
21
Flink重点难点:状态(Checkpoint和Savepoint)容错与两阶段提交
22
详解flink中Look up维表的使用
23
Flink 1.11中对接Hive新特性及如何构建数仓体系
24
Flink 实时计算 - SQL 维表 Join 的实现
25
大数据技术周报第 010 期
26
实时数仓在有赞的实践
27
美团基于 Flink 的实时数仓平台建设新进展
28
基于Flink+Hive构建流批一体准实时数仓
29
实时数仓:基于流计算 Oceanus 实现 MySQL 和 HBase 维表到 ClickHouse 的实时分析
30
当 TiDB 与 Flink 相结合:高效、易用的实时数仓
31
flink维表关联系列之Mysql维表关联:全量加载
32
基于Flink的高可靠实时ETL系统
33
基于 Flink 实现的商品实时推荐系统(附源码)
34
【Flink】基于 Flink 的流式数据实时去重
35
Flink 实战 | 贝壳找房基于Flink的实时平台建设
36
Apache Hudi在华米科技的应用-湖仓一体化改造
38
Flink checkpoint
39
理解Flink checkpoint
40
flink checkpoint配置整理
41
flink checkpoint 源码分析 (二)
42
聊聊flink的checkpoint配置
43
Flink中案例学习--State与CheckPoint
44
Flink源码阅读(一)--Checkpoint触发机制
45
Flink企业级优化全面总结(3万字长文,15张图)
46
Flink高频面试题,附答案解析
47
学习Flink,看这篇就够了
48
【最全的大数据面试系列】Flink面试题大全
49
Flink SQL Client综合实战

Flink中案例学习--State与CheckPoint

一、State

在Flink中,按照基本类型,对State做了以下两类的划分:

Keyed State,和Key有关的状态类型,它只能被基于KeyedStream之上的操作,方法所使用。我们可以从逻辑上理解这种状态是一个并行度操作实例和一种Key的对应, <parallel-operator-instance, key>。 Operator State(或者non-keyed state),它是和Key无关的一种状态类型。相应地我们从逻辑上去理解这个概念,它相当于一个并行度实例,对应一份状态数据。因为这里没有涉及Key的概念,所以在并行度(扩/缩容)发生变化的时候,这里会有状态数据的重分布的处理。如下图:

Keyed State 应用示例:

代码示例:

代码语言:javascript
复制
public class StateManager extends RichFlatMapFunction<Tuple2<Long, Long>, Tuple2<Long, Long>> {

    /**
     * 操作 state 的句柄
     * @param longLongTuple2
     * @param collector
     * @throws Exception
     */

    private transient ValueState<Tuple2<Long, Long>> sum;


    @Override
    public void flatMap(Tuple2<Long, Long> value, Collector<Tuple2<Long, Long>> out) throws Exception {

        //获取state值
        Tuple2<Long, Long> currentSum = sum.value();

        currentSum.f0 = currentSum.f0 + 1;
        currentSum.f1 = currentSum.f1 + value.f1;

        //操作state更新
        sum.update(currentSum);

        //输出flatMap的算子结果
        if(currentSum.f0 >= 2)
        {
            out.collect(new Tuple2<Long, Long>(value.f0, currentSum.f1/currentSum.f0));
        }

    }


    @Override
    public void open(Configuration parameters) throws Exception {

        ValueStateDescriptor<Tuple2<Long, Long>> descriptor = new ValueStateDescriptor<Tuple2<Long, Long>>(
                "average",                                                      //状态的名称
                TypeInformation.of(new TypeHint<Tuple2<Long, Long>>() {}),      //状态的类型
                Tuple2.of(0L, 0L)                                               //状态的初始默认值
        );

        sum = getRuntimeContext().getState(descriptor);


    }


}

Operator State 应用示例:

二、checkpoint的应用示例

代码语言:javascript
复制
        //获取flink的运行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // 每隔1000 ms进行启动一个检查点【设置checkpoint的周期】
        env.enableCheckpointing(1000);
        // 高级选项:
        // 设置模式为exactly-once (这是默认值)
        env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
        // 确保检查点之间有至少500 ms的间隔【checkpoint最小间隔】
        env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500);
        // 检查点必须在一分钟内完成,或者被丢弃【checkpoint的超时时间】
        env.getCheckpointConfig().setCheckpointTimeout(60000);
        // 同一时间只允许进行一个检查点
        env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
        // 表示一旦Flink处理程序被cancel后,会保留Checkpoint数据,以便根据实际需要恢复到指定的Checkpoint【详细解释见备注】
        //ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION:表示一旦Flink处理程序被cancel后,会保留Checkpoint数据,以便根据实际需要恢复到指定的Checkpoint
        //ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION: 表示一旦Flink处理程序被cancel后,会删除Checkpoint数据,只有job执行失败的时候才会保存checkpoint
        env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
下一篇
举报
领券