一、Flink基本编程模型
1、Stateful Stream Processing
- 它位于最底层, 是core API 的底层实现;推荐学习时使用,生产中以稳定为主,不建议使用。
- processFunction:开发复杂、比较灵活,刚开始学习时,不推荐使用。
- 利用低阶 API,构建一些新的组件(比如:利用其定时做一定情况下的匹配和缓存)
- 灵活性高,但开发比较复杂。
2、Core APIs
- DataStream
- DataSet
3、Table & SQL
- SQL 构建在Table 之上,都需要构建Table 环境。
- 不同的类型的Table 构建不同的Table 环境。
- Table 可以与DataStream或者DataSet进行相互转换。
- Streaming SQL 不同于存储的SQL, 最终会转化为流式执行计 划。
二、Flink 构建的流程
1、构建计算环境(决定采用哪种计算执行方式)
datastream(无边界,死循环) 和 dataset(有边界,直到找到那个数据为止)
2、创建Source(可以多个数据源)
•对数据进行不同方式的转换(提供了丰富的算子)
•对结果的数据进行Sink(可以输出到多个地方)
注意:不能少写execute
3、Flink DataFlow
4、Flink 并行化DataFlow
5、window
无界的数据转换为有界的。
•什么是window?
•Window 类 型?
Count Window、Time Window、自定义window
•Window 聚合日常会遇到的问题(数据过热,延迟数据丢弃, 反压等问题)
6、Time类型
•Event Time
•Ingestion Time
•Processing Time
•经常与window 结合
举例:
•一条日志进入Flink的时间为2017-11-12 10:00:00,123】--进入时间,
到达window的系统时 间为2017-11-12 10:00:01,234】--process time. 日志的内容如下:
•2017-11-02 18:37:15,624】--event time INFO
org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider - Failing over to rm2
7、State
•什么是状态,状态托管
某个算子的中间状态,有状态的计算比较复杂,无状态计算比较简单(不依赖于其他状态)。
8、Operator State
存储在内存中
9、Keyed State
根据具体情况存储
10、State Backend (rocksdb + hdfs)
先存放在 rocksdb,再异步同步到 hdfs 中。
11、checkpoint
- 量级容错机制(全局异步,局部同步)
- 保证exactly-once 语义
- flink 内部保持一致,不含其他组件时。
- 用于内部失败的恢复
- 基本原理(这是面试经常问的)
(1)通过往source 注入barrier
(2)barrier作为checkpoint的标志
12、savepoint
•流处理过程中的状态历史版本
•具有可以replay的功能
•外部恢复(应用重启和升级--修改并行度)
•两种方式触发
(1)Cancel with savepoint:元数据 copy
(2)手动主动触发:某个时间点触发