一、系统架构
1. 会话模式

作业管理器(JobManager)
JobManager 是 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。每个应用由唯一的 JobManager 控制。
JobMaster
JobMaster 是 JobManager 中最核心的组件,负责处理单独的作业(Job)。JobMaster 和具体的 Job 是一一对应的。在早期版本中,JobManager 的概念范围较小,实际指的就是现在的 JobMaster。
作业提交时,JobMaster 接收应用,将 JobGraph 转换为物理层面的数据流图(执行图 ExecutionGraph),包含所有可并发执行的任务。JobMaster 向资源管理器请求必要资源,获取后分发到 TaskManager 执行。运行过程中,JobMaster 负责中央协调操作,如检查点(checkpoints)协调。
资源管理器(ResourceManager)
ResourceManager 主要负责资源的分配和管理,Flink 集群中只有一个。资源主要指 TaskManager 的任务槽(task slots)。任务槽是资源调配单元,包含 CPU 和内存资源。每个任务需分配到 slot 上执行。
注意区分 Flink 内置的 ResourceManager 和其他资源管理平台(如 YARN)的 ResourceManager。
分发器(Dispatcher)
Dispatcher 提供 REST 接口用于提交应用,并为新作业启动新的 JobMaster 组件。它也会启动 Web UI 展示监控信息。Dispatcher 并非必需,不同部署模式下可能被忽略。
任务管理器(TaskManager)
TaskManager 是 Flink 中的工作进程,负责具体计算。集群中至少有一个 TaskManager。每个 TaskManager 包含一定数量的任务槽(task slots)。Slot 是资源调度最小单位,限制了 TaskManager 能并行处理的任务数量。
启动后,TaskManager 向资源管理器注册 slots;收到指令后,将槽位提供给 JobMaster 调用以分配任务。执行过程中,TaskManager 可缓冲数据并与其他 TaskManager 交换数据。
二、核心概念
1. 并行度
1. 并行度概念
代码示例:
package com.dashu.day02;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.tuple.Tuple;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSink;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
org.apache.flink.util.Collector;
{
Exception {
StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<String> socketDS = evn.socketTextStream(, );
SingleOutputStreamOperator<String> flatMapDS = socketDS.flatMap( <String, String>() {
Exception {
String[] s1 = s.split();
(String string : s1) {
out.collect(string);
}
}
});
SingleOutputStreamOperator<Tuple2<String, Long>> mapDS = flatMapDS.map( <String, Tuple2<String, Long>>() {
Tuple2<String, Long> Exception {
Tuple2.of(s, );
}
});
KeyedStream<Tuple2<String, Long>, Tuple> keyDS = mapDS.keyBy();
SingleOutputStreamOperator<Tuple2<String, Long>> sumDS = keyDS.sum();
sumDS.print();
evn.execute();
}
}


















