ToB企服应用市场:ToB评测及商务社交产业平台

标题: 一文搞懂大数据流式计算引擎Flink【万字详解,史上最全】 [打印本页]

作者: 金歌    时间: 2024-11-7 13:12
标题: 一文搞懂大数据流式计算引擎Flink【万字详解,史上最全】
往期推荐

  一文入门大数据准流式计算引擎Spark【万字详解,全网最新】-CSDN博客
  浅谈维度建模、数据分析模型,何为数据仓库,与数据库的区别_统一数仓 数据库用户名-CSDN博客数仓架构:离线数仓、实时数仓Lambda和Kappa、湖仓一体数据湖-CSDN博客
  数仓分层ODS、DWD、DWM、DWS、DIM、DM、ADS_ods dwd dws ads dm-CSDN博客浅谈维度建模、数据分析模型,何为数据仓库,与数据库的区别_统一数仓 数据库用户名-CSDN博客
  目次
0. Flink知识图谱
1. Flink发展
1.1 四代计算引擎
2. Flink简介
2.1 Flink特点 
2.2 批处置惩罚和流处置惩罚 
2.3 有界流和无界流
2.4 Flink和Spark Streaming
3. Flink三层核心架构
3.1 API & Libraries层详解
3.1.1 SQL&Table API层
3.1.2 DataStream & DataSet API层
3.1.3 Stateful Stream Processing层
4. 三种Time概念
4.1 WaterMark水印
5. Windows窗口类型
5.1 时间窗口
5.1.1 滚动窗口Tumbling Windows
5.1.2 滑动窗口Sliding Windows
5.1.3 会话窗口Session Windows
5.1.4 全局窗口Global Windows
5.2 计数窗口
6. 状态管理
6.1 状态的Flink官方界说
6.2 状态分类及状态存储类型
6.2.1 算子状态
6.2.2 键控状态
6.2.3 Broadcast State
6.3. 状态后端(长期化存储)
7. Flink算子
7.1 DataSet批处置惩罚算子
7.1.1 Source算子
7.1.2 Transform 转换算子
7.1.3 Sink 输出算子
7.2 DataStream流处置惩罚算子
8. Flink容错
8.1 Checkpoint机制
9. Flink CEP
9.1 使用场景 
9.2 CEP API
10. Flink CDC
10.1 CDC种类
11. Flink SQL

0. Flink知识图谱


1. Flink发展

   Apache Flink 诞生于柏林工业大学的一个研究性项目,原名 StratoSphere 。2014 年,由 StratoSphere 项目孵化出 Flink,并于同年捐赠 Apache,之后成为 Apache 的顶级项目。2019 年 1 年,阿里巴巴收购了 Flink 的母公司 Data Artisans,并公布开源内部的 Blink,Blink 是阿里巴巴基于 Flink 优化后的版本,增长了大量的新功能,并在性能和稳固性上进行了各种优化,履历过阿里内部多种复杂业务的挑战和检验。同时阿里巴巴也表示会渐渐将这些新功能和特性 Merge 回社区版本的 Flink 中,因此 Flink 成为现在最为火热的大数据处置惩罚框架。
    1.1 四代计算引擎

  在国外一些社区,有很多人将大数据的计算引擎分成了 4 代,当然,也有很多人不会认同。我们先姑且这么认为和讨论。
  
  2. Flink简介

   
  2.1 Flink特点 

   
  2.2 批处置惩罚和流处置惩罚 

   
  在 Spark 生态体系中,对于批处置惩罚和流处置惩罚采用了差别的技术框架,批处置惩罚由 SparkSQL 实现,流处置惩罚由 Spark Streaming 实现,这也是大部分框架采用的策略,使用独立的处置惩罚器实现批处置惩罚和流处置惩罚,而 Flink 可以同时实现批处置惩罚和流处置惩罚,Flink 将批处置惩罚(即处置惩罚 有限的静态数据)视作一种特殊的流处置惩罚,即把数据看作是有界的 !
  2.3 有界流和无界流

   无界数据流:
  
  有界数据流:
  
  2.4 Flink和Spark Streaming

   Spark本质是批处置惩罚
  
  Flink以流处置惩罚为根本
  
  

  3. Flink三层核心架构

   下图为 Flink 技术栈的核心构成部分,由上而下分别是 API & Libraries 层、Runtime 核心层以及物理部署层。
  
  
  

3.1 API & Libraries层详解

   在API & Libraries层,有如下更细致的分别,API 的同等性由下至上依次递增,接口的表现能力由下至上依次递减。
  

3.1.1 SQL&Table API层

    SQL & Table API 同时实用于批处置惩罚和流处置惩罚,这意味着可以对有界数据流和无界数据流以相同的语义进行查询,并产生相同的结果。除了根本查询外, 它还支持自界说的标量函数,聚合函数以及表值函数,可以满足多样化的查询需求。
  3.1.2 DataStream & DataSet API层

   DataStream & DataSet API 是 Flink 数据处置惩罚的核心 API,支持使用 Java 语言或 Scala 语言进行调用,提供了数据读取,数据转换和数据输出等一系列常用操作的封装。
  3.1.3 Stateful Stream Processing层

   Stateful Stream Processing 是最低级别的抽象,它通过 Process Function 函数内嵌到 DataStream API 中。 Process Function 是 Flink 提供的最底层 API,具有最大的灵活性,允许开发者对时间和状态进行细粒度的控制
  4. 三种Time概念

   在 Flink 中,如果以时间段分别界限的话,那么时间就是一个极其紧张的字段。 Flink 中的时间有三种类型,如下图所示:
  

  
  在 Flink 的流式处置惩罚中,绝大部分的业务都会使用 eventTime,一样平常只在 eventTime 无法使用时,才会被迫使用 ProcessingTime
  4.1 WaterMark水印

   
  对延迟数据的理解
  
  5. Windows窗口类型

   在大多数场景下,我们须要统计的数据流都是无界的,因此我们无法等待整个数据流停止后才进行统 计。通常情况下,我们只须要对某个时间范围或者数目范围内的数据进行统计分析(把无穷数据分割成块进行计算分析):如每隔五分钟统计一次已往一小时内所有商品的点击量;或者每发生1000次点击后,都去统计一下每个商品点击率的占比。在 Flink 中,可以使用窗口 (Window) 来实现这类功能。按照统计维度的差别,Flink 中的窗口可以分为时间窗口 (Time Windows) 和计数窗口 (Count Windows) 。
  5.1 时间窗口

   时间窗口以时间点来界说窗口的开始(start)和结束(end),所以截取出的就是某一时间段的数据。到达结束时间时,窗口不再收集数据,触发计算输出结果,并将窗口关闭销毁。所以可以说根本思路就是“定点发车”。
  5.1.1 滚动窗口Tumbling Windows

   滚动窗口指相互之间没有重叠的窗口。例如:每隔1小时统计已往1小时内的商品点击量,那么 1 天就只能分为 24 个窗口,每个窗口之间是不存在重叠的。
  特点:时间对齐,长度固定,窗口不重叠
  

  5.1.2 滑动窗口Sliding Windows

   滑动窗口用于滚动进行聚合分析,例如:每隔 6 分钟统计一次已往一小时内所有商品的点击量,那么1天可以分为 240 个窗口,统计窗口之间存在重叠。
  特点:时间对齐,长度固定,窗口重叠
  

  5.1.3 会话窗口Session Windows

   当用户在进行连续浏览时,可能时时刻刻都会有点击数据,例如在活动区间内,用户可能频仍的将某类 商品加入和移除购物车,而你只想知道用户本次浏览最终的购物车情况,此时就等用户持有的会话结束后再进行统计。想要实现这类统计,可以通过 Session Windows 来进行实现。
  特点:时间不对齐,长度不固定,窗口不重叠
  

  5.1.4 全局窗口Global Windows

   全局窗口会将所有 key 相同的元素分配到同一个窗口中,其通常配合触发器 (trigger) 进行使用。如果没有相应触发器,则计算将不会被执行。
  

  5.2 计数窗口

   计数窗口基于元素的个数来截取数据,到达固定的个数时就触发计算并关闭窗口。每个窗口截取数据的个数, 就是窗口的大小。根本思路是“人齐发车”。
    Count Windows 用于以数目为维度来进行数据聚合,同样也分为滚动窗口和滑动窗口,实现方式也和 时间窗口根本同等。
  注意:CountWindow 的 window_size 指的是相同 Key 的元素的个数,不是输入的所有元素的总数
  
  
  6. 状态管理

参考博客:Flink 状态管理详解(超全收藏)_flink状态后端的应用场景-CSDN博客
6.1 状态的Flink官方界说

   当前计算流程须要依赖到之前计算的结果,那么之前计算的结果就是状态。
  6.2 状态分类及状态存储类型

   相对于其他流计算框架,Flink 一个比较紧张的特性就是其支持有状态计算,即你可以将中间的计算结果进行保存,并提供给后续的计算使用(Spark的RDD也可以保存计算结果供下个RDD使用,DAG)
详细而言,Flink 有两种根本类型的状态 (State) : 键控状态(Keyed State) 与算子状态(Operator State)。
这两种状态可以以两种形式存在:原始状态(raw state) 、托管状态(managed state),托管状态是由 Flink 框架管理的状态,原始状态由用户自行管理状态。
  6.2.1 算子状态

   算子状态是和算子进行绑定的,与Key无关,一个算子的状态不能被其他算子所访问到。官方文档上对 Operator State 的解释是:each operator state is bound to one parallel operator instance,所以更为确切的说一个算子状态是与一个并发的算子实例所绑定的,即假设算子的并行度是 2,那么其应有两个对应的算子状态:
  

    算子状态存储类型
  
  6.2.2 键控状态

   键控状态是一种特殊的算子状态,即状态是根据 key 值进行区分的,Flink 会为每类键值维护一个状态实例。如下图所示,每个颜色代表差别 key 值,对应四个差别的状态实例。须要注意的 是键控状态只能在 KeyedStream 上进行使用,我们可以通过 stream.keyBy(...) 来得到 KeyedStream 。
  

    键控状态存储类型
  
  6.2.3 Broadcast State

   Broadcast State 是 Flink 1.5 引入的新特性。在开发过程中,如果碰到须要 下发/广播配置、规则等低吞吐事件流到下游所有 task 时,就可以使用 Broadcast State 特性。下游的 task 接收这些配置、规则并保存为 BroadcastState, 将这些配置应用到另一个数据流的计算中 。
   6.3. 状态后端(长期化存储)

默认情况下,所有的状态都存储在 JVM 的堆内存中,在状态数据过多的情况下,这种方式很有可能导致内存溢出,因此 Flink 该提供了其它方式来存储状态数据,这些存储方式统一称为状态后端 (或状态管理器),主要有以下三种:
   
  7. Flink算子

7.1 DataSet批处置惩罚算子

7.1.1 Source算子

   
  7.1.2 Transform 转换算子

   Transform 算子基于 Source 算子操作,所以要起首构建 Flink 执行环境及 Source 算子。
  数据源读入数据之后,就可以使用各种转换算子,将一个或多个 DataStream 转换为新的 DataStream。
  
  根本转换算子(map/ filter/ flatMap
  
  聚合算子(Aggregation
  
  7.1.3 Sink 输出算子

   Flink 作为数据处置惩罚框架,最终还是要把计算处置惩罚的结果写入外部存储,为外部应用提供 支持。
  
  7.2 DataStream流处置惩罚算子

   流处置惩罚算子和批处置惩罚算子差不多,就不详细解释了。
  参考博客:一文学完Flink流计算常用算子(Flink算子大全)_flink算子scala-CSDN博客
  8. Flink容错

8.1 Checkpoint机制

Flink 的 checkpoint 机制原理来自“Chandy-Lamport algorithm”算法
   为了使状态具有精良的容错性,Flink 提供了查抄点机制 (CheckPoints) 。通过查抄点机制, Flink 定期在数据流上生成 checkpoint barrier ,当某个算子收到 barrier 时,即会基于当前状态生成一份快照,然后再将该 barrier 转达到下游算子,下游算子接收到该 barrier 后,也基于当前状态生成一份快照,依次转达直至到末了的 Sink 算子上。当出现异常后,Flink 就可以根据近来的一次的快照数据将所有算子规复到先前的状态。(Spark也有Checkpoint机制)
  简单理解为 checkpoint 是把 state 数据定时长期化存储了
  

  9. Flink CEP

   Complex Event Processing,复杂事件处置惩罚,Flink CEP 是一个基于 Flink 的复杂事件处置惩罚库,可以从多个数据流中发现复杂事件,识别故意义的事件(例如机会或者威胁),并尽快的做出相应,而不是须要等待几天或则几个月相当长的时间,才发现问题。
  9.1 使用场景 

   检测恶意用户和刷屏用户
  实时反作弊和风控
  实时营销
  实时网络攻击检测
  9.2 CEP API

   CEP API 的核心是 Pattern(模式) API,它允许你快速界说复杂的事件模式。每 个模式包罗多个阶段(stage)或者也可称为状态(state)。从一个状态切换到另一个状态,用户可以指定条件,这些条件可以作用在邻近的事件或独立事件上。
  10. Flink CDC

   
  10.1 CDC种类

   CDC 主要分为基于查询和基于 Binlog 两种方式,我们主要相识一下这两种之间的区别:
  

  11. Flink SQL

   

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4