Flink中案例学习--State与CheckPoint

一、State

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

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

Keyed State 应用示例:

代码示例:

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 应用示例:

原文地址:https://www.cnblogs.com/gxyandwmm/p/12021648.html

时间: 2024-09-30 13:02:14

Flink中案例学习--State与CheckPoint的相关文章

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

前言 如果你了解 Apache Flink 的话,那么你应该熟悉该如何像 Flink 发送数据或者如何从 Flink 获取数据.但是在某些情况下,我们需要将配置数据发送到 Flink 集群并从中接收一些额外的数据. 在本文的第一部分中,我将描述如何将配置数据发送到 Flink 集群.我们需要配置很多东西:方法参数.配置文件.机器学习模型.Flink 提供了几种不同的方法,我们将介绍如何使用它们以及何时使用它们.在本文的第二部分中,我将描述如何从 Flink 集群中获取数据. 如何发送数据给 Ta

java中常见的输入输出流案例学习

字节输入流: 1.FileInputStream 用途:从文件系统中的文件获得输入字节,常用于读取图像.声音等原始字节流,读取字符流可考虑使用FileReader 详细构造函数与常用方法可参考API文档,网上已经有中文版的API了,我是个E文盲,伤不起 这里介绍一个最常见的方法: read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中. ->off:b字节数组中的偏移量 小知识:数组偏移量,比如a[1,2,3,4,5]

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

前言 Flink 在流程序中支持不同的 Time 概念,就比如有 Processing Time.Event Time 和 Ingestion Time. 下面我们一起来看看这几个 Time: Processing Time Processing Time 是指事件被处理时机器的系统时间. 当流程序在 Processing Time 上运行时,所有基于时间的操作(如时间窗口)将使用当时机器的系统时间.每小时 Processing Time 窗口将包括在系统时钟指示整个小时之间到达特定操作的所有事

通过案例学习调优之--ADDM

通过案例学习调优之--ADDM使用 应用环境: 操作系统: RedHat EL55 Oracle:   Oracle 10gR2 一.ADDM简介          在Oracle9i及之前,DBA们已经拥有了很多很好用的性能分析工具,比如,tkprof.sql_trace.statspack.set event 10046&10053等等.这些工具能够帮助DBA很快的定位性能问题.但这些工具都只给出一些统计数据,然后再由DBA们根据自己的经验进行优化.        那能不能由机器自动在统计数

Flink中的状态与容错

1.概述 Flink支持有状态计算,根据支持得不同状态类型,分别有Keyed State和Operator State.针对状态数据得持久化,Flink提供了Checkpoint机制处理:针对状态数据,Flink提供了不同的状态管理器来管理状态数据,如MemoryStateBackend. 上面Flink的文章中,有引用word count的例子,但是都没有包含状态管理.也就是说,如果一个task在处理过程中挂掉了,那么它在内存中的状态都会丢失,所有的数据都需要重新计算. 从容错和消息处理的语义

「Flink」Flink中的时间类型

Flink中的时间类型和窗口是非常重要概念,是学习Flink必须要掌握的两个知识点. Flink中的时间类型 时间类型介绍 Flink流式处理中支持不同类型的时间.分为以下几种: 处理时间 Flink程序执行对应操作的系统时间.所有基于时间的操作(例如:时间窗口)都将使用运行相应operator的系统时间.例如:每个小时的处理时间窗口包括在系统时间范围内所有operator接收到的记录.例如:如果应用程序在09:15开始运行,则第一个滚动时间窗口将包括:09:15 – 10:00 之间的处理事件

awk案例学习

awk是一个强大的文本分析工具,awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理.awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作. 使用方法 awk '{pattern+action} {filename}' pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令. 例子1:读取指定列的内容.(last -n:列出最近登陆系统的n个用户的信息) [

通过案例学习调优之--Oracle ASH

通过案例学习调优之--Oracle ASH 应用环境: 操作系统: RedHat EL55 Oracle:   Oracle 10gR2 案例场景: SCOTT用户做事务处理,事务已经完成! 16:42:14 [email protected] prod>conn scott/tiger Connected. 16:42:20 [email protected] prod>begin 16:42:23   2  for i in 1..1000000 loop 16:42:27   3  ex

Storm入门2-单词计数案例学习

 [本篇文章主要是通过一个单词计数的案例学习,来加深对storm的基本概念的理解以及基本的开发流程和如何提交并运行一个拓扑] 单词计数拓扑WordCountTopology实现的基本功能就是不停地读入一个个句子,最后输出每个单词和数目并在终端不断的更新结果,拓扑的数据流如下: 语句输入Spout:  从数据源不停地读入数据,并生成一个个句子,输出的tuple格式:{"sentence":"hello world"} 语句分割Bolt: 将一个句子分割成一个个单词,输