flink笔记
1. flink 是什么
流式计算引擎,不用批处理,是真正意义的流计算
2. 流计算使用场景
实时交易额,iot 监控
3. flink 使用方法
依赖flink sdk,开发逻辑代码,打成jar包上传到flink服务器,flink服务器主要负责flink任务的启停,资源,监控等管理
4. flink 任务架构
JobManager: 每一个任务有一个JobHandler管理
TaskMamager: 内存资源的分配单元,资源隔离。一个计算任务内会有多个步骤,可被划分为同一个Task的步骤被一个TaskManger管理
并行度:TaskManager 下有多个slot, 多并行度依赖多slot,slot 不够则多用一个 TaskManager
5. 数据源
常见的数据源有 kafka,文件,数据库,redis 等,可自己实现数据源。
6. 流的一些操作
转换:类似 java8 Stream 的 map
聚合:分组后计算 sum 等。
分流:一条流分成逻辑上的多个流
connect 合流:根据两个流中的某个字段做合并,类似数据库的 join ,只能合并两个流
union 合流:可以合并多个流,流数据类型必须相同,类似数据库的union all
7. UDF函数
User Defined Function 支持用户则定义
8. 上下游数据传播
广播:所有数据下游都可收到
shuffle:随机发给下游
直传:直接传递给特定下游
轮询:轮询传给下游
9. 输出位置
Kafka,Redis,Es,JDBC 等待,其他可以自己实现
10. 窗口
滚动时间窗口
滑动时间窗口
会话窗口:特定时间间隔依然没有新数据收到的话就关闭当前窗口
滚动计数窗口
滑动计数窗口
11. 时间语义
可用计算时的时间,也可指定数据中的某个字段作为事件时间。
12. wartermark
含义:当wartermark 设为 5 s, 现在处理的数据的时间时间时1分8s,则1分3s 之前改关闭的窗口就可以关了
作用:窗口计算情况下,可能很晚才收到一个事件时间很靠前的的数据,wartermark 的设定可以让窗口在收到事件时间为窗口的关闭时间时,不会立即关闭,而是继续等待,等到出现一个数据的时间时间减去 wartermark 后的时间大于等于窗口关闭的时间时,才真正关闭窗口并计算。
wartermark 会导致计算延迟
wartermark实现原理:在在数据源处的数据中插入 计算wartermark 后的时间数据,各个算子接收到wartermark数据后更新自己的wartermark信息。
生成watermark数据:每个数据后都生成wartermark 性能太低,可以设置周期生成wartermark。
13. 迟到数据处理:
如果迟到时间比warterMark时间还长,
可以设置迟到时间,窗口到了关闭时间时计算一次,如果有窗口内的数据继续到达则再次计算,直到到达迟到时间,彻底关闭窗口。
如果设置迟到时间后有迟到时间更晚的数据,则可以用侧输出流接收,最后统一处理侧输出流的数据。
14. 状态管理
每个TaskManger 可以单独维护自己的状态,状态是值比如计算的中间结果,如数据之和。
15. 状态后端
专门管理状态信息的服务。
16. ProcessFuntion
flink 最底层的 方法。
17. 容错机制
checkpoint: 一个checkpoint记录的是某个数据计算完成时,各个计算节点的状态。可配置定时做一次checkpoint
18. 保存点:类似checkpoint,需由人工触发保存。
19. TableApi 和 SQL
DataStream 是 flink 常用的开发工具。
TableApi 的编写风格类似 java8 Stream.
SQl 则更上层。
20. 两个流需要join但有时差时的解决方法:
方案一:Interval Join: A 流中的一个数据a被计算时,扫描B流上指定时间范围内的数据并join 计算。
方案二:connect 合并流,当另一条流上的对应数据没到时,设置等待逻辑。