1. Flink公司架构
架构:主从(Master-Slave)模式
核心组件:Client(设计师-故障恢复) 、JobManager(派活-调度) 和 TaskManager(干活包头-数据处理),由此大家肯定看出来TaskManager还有很多干活的小弟(Task Slot).
干活流程:
(1) 图纸设计 (Client)
-
角色 :Client (项目设计师)
-
动作:
-
用户编写代码(定义 Source, Map, Sink 等算子)。
-
Client 将代码转换成 JobGraph(初步施工图纸)。
-
提交 :Client 把图纸发给 JobManager,然后就可以"下班"了。
-
(2) 任务分配与资源筹备 (JobManager)
-
角色 :JobManager (总包工头)
-
Dispatcher (前台接待):接收 Client 提交的图纸。
-
JobMaster (现场经理):每个项目配一个,负责把JobGraph 细化为物理施工图(ExecutionGraph),决定哪个算子去哪个机器跑。
-
ResourceManager (物资部长):负责找机器。如果集群资源不够,它会向 YARN/K8s 申请新的 TaskManager (招新工人)。
-
-
动作:
-
JobMaster 向 ResourceManager 申请资源(Slots)。
-
ResourceManager 协调现有的 TaskManager 上报空闲的 Slot (工位)。
-
(3) 正式干活 (TaskManager & Slots)
-
角色 :TaskManager (包工头) & Task Slot (具体干活的工人)
-
动作:
-
部署:JobManager 把具体的任务代码下发给 TaskManager 的特定 Slot。
-
执行:Slot 开始处理数据流。
- Task Chaining (任务链):为了效率,JobManager 会把多个小任务(如 Map -> Filter)串起来,交给同一个 Slot 一口气做完,减少传递损耗。
-
数据交换 (Shuffle):如果需要跨机器传数据(比如 GroupBy),不同 TaskManager 之间会通过网络直接传输。
-
(4) 监工与备份 (容错机制)
-
角色 :JobManager (监工) & TaskManager (记录员)
-
动作:
-
心跳检测:TaskManager 定期向 JobManager 报平安(心跳)。
-
Checkpoint (检查点):
-
JobManager 定期喊一声:"大家停一下手里的活,把当前进度存个档!"
-
所有 TaskManager 将内存中的状态快照保存到持久化存储(如 HDFS/S3)。
-
-
故障恢复:
-
如果某个 TaskManager 挂了(断电/宕机),JobManager 发现心跳丢失。
-
JobManager 立即指挥其他健康的 TaskManager,利用最近一次的 Checkpoint 存档,重新拉起任务 ,从断点继续干。(注意:这里才是故障恢复的核心,Client 不参与)。
-
-
关于Flink怎么处理反压和数据倾斜
后续还在学习更新中。