1、State概念理解

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

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

概念理解如下图:

1、如果一个job没有设置checkpoint,那么state默认是是保存在java的堆内存中,这样会导致task失败后,state存在丢失现象;

2、checkpoint在一个job中负责一份全局的状态快照,里边包含了所有的task和operator状态;

3、task指的是flink中执行的基本单位,operator指的是算子操作;

4、state可以被记录,也可以在失败的时候被恢复;

5、state存在两种,一种是 key state, 一种是 operator state;

1.1 Keyed State 应用示例:

关键点总结:

1、上述State对象,仅仅是用来与状态进行交互,包括状态的更新,状态删除,状态清空等。

2、真正的状态值可能存在内存、磁盘、或者其他分布式存储系统中。

代码示例:

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 + ;
currentSum.f1 = currentSum.f1 + value.f1; //操作state更新
sum.update(currentSum); //输出flatMap的算子结果
if(currentSum.f0 >= )
{
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); }
}

1.2 Operator State 应用示例:

2、checkpoint的应用示例

基于状态的容错:

1、依靠checkpoint机制;

2、保证exactly-once;

3、只能保证flink系统内的exactly-once;

4、对source和sink需要依赖外部的组建一同保证;

state的存入:

state恢复:

checkpoint概念:

checkpoint的配置:

1、默认是disable,需要手动开启;

2、checkpoint开启后,默认的 checkpointMode 是Exactly-once;

3、checkpointMode有两种,一种是 Exactly-once, 另一种是 At-least-once;

4、Exactly-once大多数程序是适合的, At-least-once可能用在某些延迟超低的应用程序(始终延迟几ms)

代码配置如下:

        //获取flink的运行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 每隔1000 ms进行启动一个检查点【设置checkpoint的周期】
env.enableCheckpointing();
// 高级选项:
// 设置模式为exactly-once (这是默认值)
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
// 确保检查点之间有至少500 ms的间隔【checkpoint最小间隔】
env.getCheckpointConfig().setMinPauseBetweenCheckpoints();
// 检查点必须在一分钟内完成,或者被丢弃【checkpoint的超时时间】
env.getCheckpointConfig().setCheckpointTimeout();
// 同一时间只允许进行一个检查点
env.getCheckpointConfig().setMaxConcurrentCheckpoints();
// 表示一旦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);

3、State Backend的应用示例

三种保存方式介绍:

代码示例:

//设置statebackend
//env.setStateBackend(new RocksDBStateBackend("hdfs://hadoop100:9000/flink/checkpoints",true));

Flink中案例学习--State与CheckPoint理解的更多相关文章

  1. Flink学习(三)状态机制于容错机制,State与CheckPoint

    摘自Apache官网 一.State的基本概念 什么叫State?搜了一把叫做状态机制.可以用作以下用途.为了保证 at least once, exactly once,Flink引入了State和 ...

  2. Apache Flink 进阶(三):Checkpoint 原理解析与应用实践

    大家好,今天我将跟大家分享一下 Flink 里面的 Checkpoint,共分为四个部分.首先讲一下 Checkpoint 与 state 的关系,然后介绍什么是 state,第三部分介绍如何在 Fl ...

  3. Flink 从0到1学习 —— Flink 中如何管理配置?

    前言 如果你了解 Apache Flink 的话,那么你应该熟悉该如何像 Flink 发送数据或者如何从 Flink 获取数据.但是在某些情况下,我们需要将配置数据发送到 Flink 集群并从中接收一 ...

  4. 老板让阿粉学习 flink 中的 Watermark,现在他出教程了

    1 前言 在时间 Time 那一篇中,介绍了三种时间概念 Event.Ingestin 和 Process, 其中还简单介绍了乱序 Event Time 事件和它的解决方案 Watermark 水位线 ...

  5. 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)

    关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)   作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...

  6. ArcGIS案例学习笔记-点集中最近点对和最远点对

    ArcGIS案例学习笔记-点集中最近点对和最远点对 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:对于点图层,查找最近的点对和最远的点对 数据: 方法: 1. ...

  7. 《从0到1学习Flink》—— Flink 中几种 Time 详解

    前言 Flink 在流程序中支持不同的 Time 概念,就比如有 Processing Time.Event Time 和 Ingestion Time. 下面我们一起来看看这几个 Time: Pro ...

  8. 《从0到1学习Flink》—— 介绍Flink中的Stream Windows

    前言 目前有许多数据分析的场景从批处理到流处理的演变, 虽然可以将批处理作为流处理的特殊情况来处理,但是分析无穷集的流数据通常需要思维方式的转变并且具有其自己的术语(例如,"windowin ...

  9. 【转载】深度学习中softmax交叉熵损失函数的理解

    深度学习中softmax交叉熵损失函数的理解 2018-08-11 23:49:43 lilong117194 阅读数 5198更多 分类专栏: Deep learning   版权声明:本文为博主原 ...

随机推荐

  1. PostgreSQL 多版本的实现与Innodb和oracle的差别

    PostgreSQL与oracle或InnoDB的多版本实现最大的区别在于最新版本和历史版本是否分离存储,PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分离了数据,索引 ...

  2. bzoj 4922: [Lydsy1706月赛]Karp-de-Chant Number 贪心+dp

    题意:给定 $n$ 个括号序,让你从中选取一些括号序按照任意顺序拼接,最终生成一个合法的括号序列,求这个合法序列长度最大值. 题解:假设括号序列相对顺序固定,而我们要做的只是判断选还是不选的话可以转化 ...

  3. hdu 6183

    给出二维平面$opt1.$ 对点 $(x, y)$ 增减颜色 $c$,$opt2.$ 询问矩形 $(1, y_1), (x, y_2)$ 内出现过的颜色种数$x, y <= 1e6, c < ...

  4. dashucoding记录2019.6.7

    购买阿里云ECS主机 购买域名 申请备案 环境配置 安装wordpress 域名解析 在"产品与服务"中选择云服务器ECS 购买完域名之后建议去实名认证 域名购买链接:http:/ ...

  5. centos7haproxy+keepalive

    1部署keepalived 1.1下载keepalived源码包,并解压# wget http://www.keepalived.org/software/keepalived-1.4.2.tar.g ...

  6. python pillow 绘制图片

    demo1 #coding=utf- from PIL import Image img = Image.,))###创建一个5*5的图片 pixTuple = (,,,)###三个参数依次为R,G, ...

  7. [CERC2015]Juice Junctions(边双连通+字符串hash)

    做法 考虑边数限制的特殊条件,显然答案仅有\(\{0,1,2,3\}\) 0:不联通 1:连通 2:边双连通 3:任意删掉一条边都为边双连通 考虑每次删边后记录各点的边双染色情况来特判\(3\):是否 ...

  8. 为Python配置Vim编辑器(GUI/非GUI皆可)

    原文地址:https://blog.csdn.net/alanzjl/article/details/49383943 Vim as a python IDE ** 最近一直在写Python,但一直没 ...

  9. Java生成不重复的随机数组的方法

    一.JAVA中生成随机数的方式 1.在j2se中使用Math.random()令系统随机选取一个01之间的double类型小数,将其乘以一个数,比如25,就能得到一个025范围内的随机数,这个在j2m ...

  10. [转]Python3之max key参数学习记录

    Python3之max key参数学习记录 转自https://www.cnblogs.com/zhangwei22/p/9892422.html 今天用Python写脚本,想要实现这样的功能:对于给 ...