三、Flink的工作原理
1、Flink架构
Flink架构的关键是三个重要组件的协同工作
Client(客户端):代码解析,类型抽取,代码优化,图构建,传输任务至jobmanager,取回结果
job manager(作业管理器):任务调度,checkpoint,任务追踪,收集维护元数据。
task manager(任务管理器):任务在此执行
2、flink架构的核心原则
- 向用户屏蔽了大多数内部运行机制细节
- api与实际执行逻辑解耦
- 声明式编程
- 无需或需要较少的调试
- 统一的流式处理模型
- 无需或需要较少的配置
- 支持多种文件系统
- 多种部署选项
- 与hadoop生态系统及技术结合紧密
- 应用逻辑与容错分离
3、flink的组件栈
如图:
4、Flink中的Checkpoint
可以处理有状态流式数据的一个原因就是Checkpoint机制。容错就是完全依赖于该机制。
5、Flink中的SavePoint
savepoint是flink的另一个重要特性,也是它领先其他竞争对手的原因之一。
savepoint是某个时间点的快照,记录了输入流的处理过程中的精确位置,并保存了相关元数据。它还可以追踪所有挂起状态,或在flink执行引擎中正在执行的回话。
6、flink中的窗口选项
处理无限的数据流需要相应的窗口功能。flink datastream api有一些内置的窗口功能,可以满足大多数需求。
- 时间窗口
- 计数窗口
- Tumbling窗口(滚动)
- Sliding窗口(滑动)
7、内存管理
Flink的内存管理是开创性的,其具有以下特性:
- 无GC的策略
- 序列化基于单个字段而不是整个字段
- 使用c++风格的内存管理而不是java风格的
- 使用内存池,内存池由多个页组成,每个页由字节数组和map对象组成