Apache Flink学习0-1知识点全景图
2022-01-26 20:30:00 2 举报
AI智能生成
Apache Flink 学习0-1知识点全景图
作者其他创作
大纲/内容
Flink项目源码
Flink CEP
5 Flink 窗口
作用
真实流都是无界的,把无界流进行切分得到有限的数据集处理,将流数据分发到有限大小的桶中进行分析
分类
时间窗口 Time Window
滚动时间窗口 API:timeWindow(Time.second(3))
滑动时间窗口 API:timeWindow(Time.seconds(3),TIme.seconds(1))
会话窗口 window(ProcessingTimeSessionWindow.withGap(Time.second(3)))
计数窗口 Count Window
滚动计数窗口 countWindow(3)
滑动计数窗口 countWindow(3,1)
窗口其他相关API
聚合函数
AggregateFunction()
ReduceFunction()
windowFunction
ProcessWindowFunction
全量聚合函数
增量聚合函数
.trigger()
.evitor()
.allowedLateness()
.sideOutputLateData()
.getSideOutput()
7 Flink状态管理
状态类型
算子状态
列表状态 Liststate
联合列表状态 Union list state
广播状态 Broadcast state
针对特定算子的状态,作用范围为算子任务,对同一子任务是共享的
定义
分类
键控状态
声明一个键控状态
读取状态
对状态赋值
清空状态
值状态 Value state
列表状态 List state
映射状态 Map state
聚合状态 Aggregate State
根据输入数据流中定义的键key来维护和访问
定义
分类
使用
状态后端
定义
状态的存储、访问、维护由一个可插入的组件决定,这个组件叫做状态后端
作用
本地状态的管理
将检查点checkpoint写入到远程存储
分类
将所有状态序列化后,存入RocksDB中
将checkpoint存储到持久化的文件系统中,对于本地状态和MemoryStateBackend一样存在TaskManager的JVM堆上
特点:拥有内存级别的访问速度和更好的容错性
内存级别的状态后端,将键控状态作为内存中的对象进行管理,将它们存储在TaskManager的JVM堆上,将checkpoint存储在JobManager的内存中
特点:低延迟、快速,但不够稳定
MemoryStateBackend
FsStateBacked
RocksDBStateBackend
8 Flink状态一致性
基本含义
有状态的流处理,算子或者键值保存自己的状态,所谓的状态一致性就是计算结果要准确,数据不会丢失也不重复计算,在遇到故障时可以恢复状态并保证恢复后的结果是完全正确的
主要组成
Flink内部容错机制
定义
作用
提供自定义保存镜像的功能,创建保存点使用的算法和检查点完全相同,不能自动创建,需要手动创建
有计划的创建保存点不仅可用于故障恢复,还可用于手动备份、版本迁移,暂定和重启应用
定义
作用
特点
执行原理
执行步骤
实现算法
对所有任务的状态做保存,在这个时间点上是所有任务都恰好处理完一个相同的输入数据的时候
在出现故障的情况下,保证Flink内部的状态一致性,是Flink故障恢复机制的核心
可以保证Flink的exact-once,并且不需要牺牲性能
异步分界线快照 ,所有任务的状态都会做一份快照,保存状态和数据计算异步执行,边保存状态边对数据进行计算,所有状态都完成JobManager会完成checkpoint的保存
在执行Job时会定期保存状态的一致性检查点,如果故障产生,从最近的检查点恢复Job的状态并重新启动处理流程
检查点保存
出现故障
重启应用
从checkpoint中读取状态并将状态重置
处理检查点到发生故障之间的所有数据
并行的两个Source任务读取两个输入流
JobManager向每个source发送一个带有新检查点Id的信息,通过这种方式启动检查点
Source将状态写入检查点,状态后端在状态存入检查点后返回通知source任务,source任务向JobManager确认检查点wanc
barrier向下游传递,sum任务会等待所有输入分区的barrier到达,对于已经到达的分区,继续到达的数据会被缓存,未到达的分区,数据正常处理
sum任务收到所有输入分区的barrier后会将任务状态保存到状态后端的检查点中,barrier继续向下游分发
向下游分发检查点barrier后,sum任务继续正常处理数据
sink任务向JobManager确认状态保存到checkpoint,所有的任务都确认已成功将状态保存到检查点,一个新的检查点才算真正的完成了
Chandy-Lamport算法的分布式快照
检查点分界线 Checkpoint Barrier
将检查点保存和数据处理分离开,不暂停整个应用
利用分界线把一条流上数据按照不同的检查点分开,分界线之前数据引起的状态更改属于当前分界线所属的检查点,分界线之后数据引起的更改,包含在之后的检查点中
依赖
执行步骤
一致性检查点 checkpoint
保存点 savepoint
端到端状态一致性
内部保证-checkpiont
source端-可记录的偏移量位置
sink端-故障恢复时,不会有数据重复写入
幂等写入
事务写入
除了Flink内部流处理的一致性外还需要保证整个流处理过程中source和sink的一致性
基本含义
实现方法
分类
AT-MOST-ONCE
AT-LEAST-ONCE
EXACTLY-ONCE
1 实时处理框架
Strom
Strom是第一代实时处理框架,基于流处理,数据吞吐量和延迟上效果不理想,只支持at least once和at most once,不能保证精确一次性,在数据准确性上存在不足
SparkStreaming
第二代实时处理框架,基于mini-batch思想,每次处理一小批数据,一小批数据包含多个事件,以接近事实处理效果,概况性来说是微批次、准实时
Flink
第三代实时处理框架,支持有界和无界数据流上做有状态计算,以时间为单位,支持exactly once,数据的准确性得到提高,相比Strom,吞吐量更高,延迟更低,相比SparkStreaming,Flink是真正意义上的实时计算,所需计算资源更少
2 flink简介
Flink是什么
Apache Flink是一个框架和分布式处理引擎,用于在无边界和有边界
数据流上进行有状态的计算
无界流 有定义流的开始,没有定义流的结束,会无休止的产生数据,数据摄取后需要被立刻处理,因为输入时无限的,不能等待所有数据都到达再进行处理,所以通常要求特定顺序摄取事件,如事件发生顺序
有界流 有定义流的开始,也有定义流的结束,有界流可以在摄取所有数据后再进行计算,所有数据可以被排序,所以并不需要有序摄取,有界流处理通常被称为批处理
数据流上进行有状态的计算
无界流 有定义流的开始,没有定义流的结束,会无休止的产生数据,数据摄取后需要被立刻处理,因为输入时无限的,不能等待所有数据都到达再进行处理,所以通常要求特定顺序摄取事件,如事件发生顺序
有界流 有定义流的开始,也有定义流的结束,有界流可以在摄取所有数据后再进行计算,所有数据可以被排序,所以并不需要有序摄取,有界流处理通常被称为批处理
Flink的主要特点
事件驱动
基于流
更好的状态控制
分层API
Flink的其他特点
基于自身的状态一致性保障
低延迟,每秒可以处理数百万个事件,毫秒级延迟
提供常见存储系统的连接器:Kafka、Hdfs、Redis、ES、JDBC
高可用,可动态扩展,高扩展,状态保存达到TB级别仍可以保持高吞吐、低延迟
支持事件时间
批流一体化,批是流的特例
Flink VS Spark StreamString
Flink是真正的流处理,延迟在毫秒级,Spark Streaming是微批次,延迟在秒级
Flink可以处理事件时间,Spark Streaming只能处理机器时间,无法保证时间语义的准确性
Flink的检查点比Spark Streaming更加灵活,性能更高,SparkStreaming的检查点算法是在每个stage结束后才会保存检查点
Flink 易于实现端到端的一致性
批处理上Spark更具有优势且社区完善,技术成熟
性能对比
SQL支持
3 flink运行环境
YARN
Mesos
k8s
裸机集群独立部署
4 Flink运行架构
运行组件
分发器 Dispatcher
接收用户提供的作业并新提交的作业启动一个新的JobManager
资源管理器 ResourceManager
负责资源的管理,整个Flink集群中只有一个RescouceManager
作业管理器 JobManager
负责管理作业的执行,协调所以任务的操作,一个Flink集群中有多个作业同时执行,每个作业都有自己的JobManager
任务管理器 TaskManager
负责执行具体的task任务,从JobManager处接收需要部署的task,接收任务数据并处理
任务提交流程
执行图
StreamGraph 逻辑流图
根据提交的Stream API编写的代码生成最初的图,表示程序的拓扑结构
JobGraph 作业图
StreamGraph经过优化后生成了JobGraph,提交给JobManager,优化点为将多个符合条件的节点当做一个节点处理
ExceptionGraph 执行图
ExceptionGraph是JobGraph的并行化版本,是调度层最核心的数据结构
物理执行图
JobManager根据ExceptionGraph对Job进行调度后,在各个TaskManager上部署task后形成的图
执行图流程
并行度
理论上一个算子的子任务个数称为并行度,生产过程中,一个流的并行度是所有算子中最大的并行度
flink任务提交
Flink API
Batch API
Environment
ExecutionEnvironment batchEnv = ExecutionEnvironment.getExecutionEnvironment();
Source
Transform
Sink
Stream API
Environment
StreamExecutionEnvironment streamEnv = StreamExecutionEnvironment.getExecutionEnvironment();
Source
streamEnv.readTextFile()
streamEnv.fromCollection()
集合
文件
Kafka
自定义
Transform
map
flatMap
filter
keyBy
shuffle
split
select
connect
union
Sink
Kafka Sink
Redis Sink
Es Sink
自定义Sink
Window API
ReduceFunction()
AggregateFunction()
windowFunction
ProcessWindowFunction()
trigger()
evitor()
allowedLateness()
sideOutputLateData()
getSideOutput()
Watermark API
ProcessFunction API
State APi
Table APi
6 Flink时间语义
Flink时间语义图形化展示
分类
Event Time 事件时间
为什么要有Watermark
图形解释
Watermark的本质
Watermark的传递
流处理过程中由于网络、背压等原因可能导致产生乱序数据,避免乱序数据没有被计算,需要等待计算,为了处理这些乱序数据,在数据流中增加了标记,称为Watermark
是一种衡量EventTime进展的机制,是一条特殊的数据记录,可以设定延迟触发
保存上游分区Watermark,取最小广播到下游
Watermark
Process Time 执行操作算子的本地系统时间,和机器相关,模式是Process Time
Ingestion Time 数据进入Flink的时间
0 条评论
下一页