Flink之状态编程

简介: 有状态的计算是流处理框架要实现的重要功能,因为稍复杂的流处理场景都需要记录状 态,然后在新流入数据的基础上不断更新状态。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+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
流计算 Windows
Flink窗口与状态编程开发(一)
Flink窗口与状态编程开发(一)
|
消息中间件 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 编程)
|
分布式计算 监控 API
flink 入门编程day02
flink 入门编程day02
224 5
|
消息中间件 存储 NoSQL
Flink几道经典编程场景
Flink几道经典编程场景
|
BI Apache 流计算
Apache Flink 概念介绍:有状态流式处理引擎的基石(二)| 学习笔记
快速学习 Apache Flink 概念介绍:有状态流式处理引擎的基石。
Apache Flink 概念介绍:有状态流式处理引擎的基石(二)| 学习笔记
|
SQL 消息中间件 存储
Flink SQL 核心概念剖析与编程案例实战
本文使用了 Docker 镜像快速安装一些基础组件,zk 和 kafka,并通过案例的方式,剖析了 SQL 的概念与详细的使用方式
|
存储 缓存 安全
eBay:Flink的状态原理讲一下……
eBay:Flink的状态原理讲一下……
438 0
eBay:Flink的状态原理讲一下……
|
存储 流计算
|
存储 Java 数据库
flink 状态后端详解
flink 状态后端详解
flink 状态后端详解
|
SQL 消息中间件 JSON
Flink SQL 编程(二)| 学习笔记
快速学习 Flink SQL 编程。
 Flink SQL 编程(二)| 学习笔记

热门文章

最新文章