1. 课时2:为什么要学习Apache Flink
1.1 定义
框架,分布式处理引擎,有状态计算Stateful,支持有界、无界数据
1.2 基础概念:
-
数据流streams——Unbounded stream(有开始,但没定义结束,数据不停进来,没有办法知道什么时候产生结果)、Bounded stream(有始有终,静态数据集,大小固定,可以知道什么时候知道处理结果)
-
State
Apache Flink支持有状态计算(Stateful):如count,需要保留之前的数据(这些数据就是状态),这些数据要存储在系统中
无状态计算:数据来一条处理一条,数据不需要留在系统中,如SQL中select、where -
Time
Event Time:表征一个事件真正发生的时间(业务的时间)
Ingestion Time :数据进入flink的时间
Processing TIme:每个算子处理数据的时间 -
API
越上层表达能力会弱(不会去关注更底层细节的东西),但是业务封装能力变强
1.3 Flink 架构
1.4 应用场景
- Data pipeline
- Data Analytics
- Data Driven
2. 课时3:Apache Flink概念介绍
——有状态流式处理引擎的基石
2.1 何为“有状态流式处理”
1. 传统批次处理方法
以时间划分将收集到的数据分为一批一批的数据,然后进行处理
假如时间转换跨越了所定义的时间划分?——批处理会:将上一个状态的中介运算结果带到下一个批次运算
2. 理想方法
- 需要有累积状态,这个累积状态会影响之后每一个数据产生的输出
- 时间(引擎需要有能力去判断所接收的数据是否已经足够产生最后的结果)
————对应的就是Stateful Stream Processor
3. 流式处理
-
数据源无穷无尽,不停地取数据,计算,然后输出
-
分散式流式处理
对于多用户的数据处理,会设置不同的key,然后将数据进行划分,根据key保证相同的用户会到相同的instance上进行处理。 -
有状态分散式流式处理
有一个变速x, x的状态会影响输出- State co-partitioned with the input stream by key(流会被key划分,那么对应产生的状态最后也会累积成累积状态,这个累积状态也会和输入流共同分区??)
- embedded local state backend(当数据很多,key变得很大时,当前节点的内存可能无法支持如此大的数据,那么就会有对应的状态后端去维护)
2.2 有状态流式处理的挑战
1.状态容错
精确一次的容错保证。需要处理的问题:
- 全域一致的快照
- 分散式状态容错
分散式快照
check point(检查点)/ checkpoint barrier n
2.状态维护
本地状态后端去维护:
1)JVM heap状态后端适合状态少的 out-of-core
2)RocksDB状态后端 asynchronous快照
3.Event-time处理
Event-time:事件在数据最源头产生的时间戳
利用Watermarks达到功能:
4.状态保存和迁移
保存点(SavePoint):一个手动产生的checkpoint——记录着流式应用中所有运算元的状态
在停止运算之前设置一个保存点,恢复重新执行之后,利用event-time赶上最新的数据,确保结果的一致性
参考视频:
https://edu.aliyun.com/lesson_1999_17864#_17864