一. Flink分层架构

-
Stateful Stream Processiing
- 位于最底层,是core API的底层实现
- process Function
- 利用低阶,构建一些新组件(比如:利用其定时做一定情况下的匹配和缓存)
- 灵活度高,但看法比较复杂
-
Core APIS
- DataStream 流式处理
- DataSet 批量处理
-
Table & SQL
- SQL构建在Table之上,都需要构建Table环境。
- 不同类型的Table构建不同的Table环境。
- Table可以与DataStream或者DataSet进行相互转换。
- Streaming SQL不同存储的SQL, 最终会转化为流式执行计划
Flink 构建的流程
- 构建计算环境(决定采用哪种计算执行方式)
- 创建Source(可以多个数据源)
- 对数据进行不同方式的转换(提供丰富的算子)
- 对结果的数据进行Sink(可以输出到多个地方)
Flink DataFlow

二. Flink运行架构
- Client
- JobManager
- TaskManager
- 角色间的通信(Akka)
-
数据的传输(Netty)
调度图
TaskManager Slot

CoLocation Group
- 保证所有的i-th的sub-tasks在同一个slots
- 主要用于迭代流
SlotSharingGroup
- 保证同一个group的i-th的sub-tasks共享同一个slots
- 算子默认的group为default
- 怎么确定一个算子的SlotSharingGroup(根据input的group和和自身是否设置group共同决定)
- 适当设置可以减少每个slot运行的线程数,从而整体上减少机器负载。
TaskManager Slot

Slots && parallelism

一个应用需要多少Slots
- 不设置SlotSharingGroup(应用的最大并行度)
- 设置SlotSharingGroup(所有SlotSharingGroup中最大的并行度之和)
OperatorChain && Task

OpertorChain组成条件
- 没有禁用Chain
- 上下游算子并行度一致
- 下游算子的入度为1
- 上下游算子在同一个slot group
- 上下游算子之间没有数据shuffle
OperatorChain的优点
- 减少线程切换
- 减少序列化与反序列化
- 减少延迟并且提高吞吐能力
运行架构小结
- JobManager 用于任务调度和checkpoint协调
- TaskManager worker节点task执行
- TaskManager Slots 用于资源分割
- Operator 算子操作
- Task 任务执行
- Parallelism 并行度
网友评论