Flink之状态编程

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 有状态的计算是流处理框架要实现的重要功能,因为稍复杂的流处理场景都需要记录状 态,然后在新流入数据的基础上不断更新状态。SparkStreaming 在状态管理这块做的不好, 很多时候需要借助于外部存储(例如 Redis)来手动管理状态, 增加了编程的难度。Flink 的状态管理是它的优势之一。

(1)什么状态


在流式计算中有些操作一次处理一个独立的事件(比如解析一个事件), 有些操作却需 要记住多个事件的信息(比如窗口操作)。


那些需要记住多个事件信息的操作就是 有状态 的。


流式计算分为 无状态计算和有状态计算两种情况

1.png



无状态的计算观察每个独立事件,并根据最后一个事件输出结果。例如,流处理应 用程序从传感器接收水位数据,并在水位超过指定高度时发出警告。

有状态的计算则会基于多个事件输出结果。以下是一些例子。例如,计算过去一小

时的平均水位,就是有状态的计算。所有用于复杂事件处理的状态机。例如,若在 一分钟内收到两个相差 20cm以上的水位差读数,则发出警告,这是有状态的计算。 流与流之间的所有关联操作,以及流与静态表或动态表之间的关联操作,都是有状 态的计算。

传统的流处理架构:

2.png


有状态的流处理架构:

3.png


(2)为什么需要状态管理


下面的几个场景都需要使用流处理的状态功能:


去重: 数据流中的数据有重复,我们想对重复数据去重,需要记录哪些数据已经流入过应 用,当新数据流入时,根据已流入过的数据来判断去重。


检测: 检查输入流是否符合某个特定的模式,需要将之前流入的元素以状态的形式缓存下 来。比如,判断一个温度传感器数据流中的温度是否在持续上升。


聚合: 对一个时间窗口内的数据进行聚合分析,分析一个小时内水位的情况。


更新机器学习模型: 在线机器学习场景下,需要根据新流入数据不断更新机器学习的模型参数。


(3)Flink中状态的分类


Flink 包括两种基本类型的状态 Managed State 和 Raw State

4.png

注意:


从具体使用场景来说,绝大多数的算子都可以通过继承 Rich 函数类或其他 提供好的接口类,在里面使用 Managed State。Raw State 一般是在已有算子和 Managed State 不够用时,用户自定义算子时使用。


在我们平时的使用中 Managed State 已经足够我们使用, 下面重点学习 Managed State


(4)Managed State 的分类


对 Managed State 继续细分,它又有两种类型


Keyed State(键控状态)


Operator State(算子状态)

5.png6.png


相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
2月前
|
流计算 Windows
Flink窗口与状态编程开发(一)
Flink窗口与状态编程开发(一)
|
6天前
|
大数据 Java API
大数据计算引擎之Flink Flink CEP复杂事件编程
大数据计算引擎之Flink Flink CEP复杂事件编程
|
2月前
|
分布式计算 监控 API
flink 入门编程day02
flink 入门编程day02
|
2月前
|
消息中间件 存储 NoSQL
Flink几道经典编程场景
Flink几道经典编程场景
|
10月前
|
SQL 消息中间件 存储
Flink SQL 核心概念剖析与编程案例实战
本文使用了 Docker 镜像快速安装一些基础组件,zk 和 kafka,并通过案例的方式,剖析了 SQL 的概念与详细的使用方式
|
消息中间件 SQL JSON
flink-sql(table api 编程)
table api 基本使用 tableEnvironment 和 streamTableEnvironment 注册表,临时表,持久表 Table api 和 table sql 混用 table api 和 datastream 混用 table api 的输入和输出(kafka) kafka的高级特性option
flink-sql(table api 编程)
|
BI Apache 流计算
Apache Flink 概念介绍:有状态流式处理引擎的基石(二)| 学习笔记
快速学习 Apache Flink 概念介绍:有状态流式处理引擎的基石。
208 0
Apache Flink 概念介绍:有状态流式处理引擎的基石(二)| 学习笔记
|
存储 缓存 安全
eBay:Flink的状态原理讲一下……
eBay:Flink的状态原理讲一下……
195 0
eBay:Flink的状态原理讲一下……
|
存储 流计算
|
存储 Java 数据库
flink 状态后端详解
flink 状态后端详解
flink 状态后端详解