一文搞懂大数据流式计算引擎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 代,当然,也有很多人不会认同。我们先姑且这么认为和讨论。

  • 首先第一代的计算引擎,无疑就是 Hadoop 承载的 MapReduce。这里大家应该都 不会对 MapReduce 陌生,它将计算分为两个阶段,分别为 Map 和 Reduce。对于上层应用来说,就不得不想方设法去拆分算法,甚至于不得不在上层应用实现 多个 Job 的串联,以完成一个完整的算法,例如迭代计算。 由于这样的弊端,催生了支持 DAG 框架的产生
  • 因此,支持 DAG 的框架被划分为第二代计算引擎。如 Tez 以及更上层的 Oozie。这里我们不去细究各种 DAG 实现之间的区别,不过对于当时的 Tez 和 Oozie 来说,大多还是批处理的任务
  • 接下来就是以 Spark 为代表的第三代的计算引擎。第三代计算引擎的特点主要 是 Job 内部的 DAG 支持(不跨越 Job),以及强调的准实时计算。在这里,很多人也会认为第三代计算引擎也能够很好的运行批处理的 Job。 随着第三代计算引擎的出现,促进了上层应用快速发展,例如各种迭代计算的性能以及对流计算和 SQL 等的支持。
  • Flink 的诞生就被归在了第四代。这应该主 要表现在 Flink 对流计算的支持,以及更一步的实时性上面。当然 Flink 也可 以支持 Batch 的任务,以及 DAG 的运算。

2. Flink简介

  • Flink 是一个分布式、高性能、有状态的流处理框架,它能够对有界和无界的数据流进行高效的处理。Flink 的 核心是流处理(DataStream),当然也支持批处理(DataSet),Flink 将批处理看成是流处理的一种特殊情况,即数据流是有 明确界限的。这和 Spark Streaming 的思想是完全相反的,Spark Streaming 的核心是批处理,它将流处理看成是批处理的一种特殊情况, 即把数据流进行极小粒度的拆分,拆分为多个微批处理。

2.1 Flink特点 

  • 支持高吞吐、低延迟、高性能的流处理
  • 结果准确,Flink提供了事件时间和处理时间,对乱序数据仍能提供一直准确的结果
  • 支持高度灵活的窗口(Window)操作,支持基于 time、count、session, 以及 data-driven 的窗口操作
  • 支持基于轻量级分布式快照(Snapshot)实现的容错
  • 一个运行时同时支持 Batch on Streaming 处理和 Streaming 处理
  • Flink 在 JVM 内部实现了自己的内存管理
  • 支持迭代计算,Spark也支持
  • 支持程序自动优化:避免特定情况下 Shuffle、排序等昂贵操作,中间结果有必要进行缓存

2.2 批处理和流处理 

  • 批处理
    有界、持久、大量,一般用于离线计算
  • 流处理
    无界、实时,流处理方式无需对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时统计

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

2.3 有界流和无界流

无界数据流:

  • 有定义流的开始,但没有定义流的结束
  • 它们会无休止的产生数据
  • 无界流的数据必须持续处理,即数据被摄取后需要立刻处理
  • 我们不能等到所有数据都到达再处理,因为输入是无限的。

有界数据流:

  • 有定义流的开始,也有定义流的结束
  • 有界流可以在摄取所有数据后再进行计算
  • 有界流所有数据可以被排序,所以并不需要有序摄取
  • 有界流处理通常被称为批处理。 

2.4 Flink和Spark Streaming

Spark本质是批处理

  • Spark数据模型:Spak采用RDD模型,Spark Streaming的DStream实际上也就是一组组小批据RDD的集合
  • Spark运行时架构:Spark是批计算,将DAG划分为不同的stage,一个完成后才可以计算下一个

Flink以流处理为根本

  • Flink数据模型:Flink基本据模型是数据流,以及事件(Event)序列
  • Flink运行时架构:Flink是标准的流执行模式,一个事件在一个节点处理完后可以直接发往下一个节点进行处理

3. Flink三层核心架构

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值