Flink 基本概念
基本名词
Job
以 jar 包的形式在 flink 中提交的可运行程序
task
stream
flink 作为一个流数据处理的引擎,就是针对一个或多个 stream 进行流计算处理,再输出到一个或多个 stream 中去,这里的 stream 可以使 mq,也可以是文件、也可以直接是控制台输入\输出。
operator && task
flink 流处理流程中的每个操作(如 map, keyBy, sink, source等)都是 operator
operator subtask
每个 operator 可以分成多个 operator subtask,一个 operator 的并行度就是 operator subtask 的数量
operator chain
flink 作为分布式运行系统,会将多个 operator subtask 关联成一个 operator task,这个过程就是 operator chain。
两个 operator subtask 能否关联起来,需要满足下列要求
“1. 上下游的并行度一致
- 下游节点的入度为1 (也就是说下游节点没有来自其他节点的输入)
- 上下游节点都在同一个 slot group 中(下面会解释 slot group)
- 下游节点的 chain 策略为 ALWAYS(可以与上下游链接,map、flatmap、filter等默认是ALWAYS)
- 上游节点的 chain 策略为 ALWAYS 或 HEAD(只能与下游链接,不能与上游链接,Source默认是HEAD)
- 两个节点间数据分区方式是 forward(参考理解数据流的分区)
用户没有禁用 chain
分布式运行时环境
JobManager
flink 集群服务的 master 节点,用来协调分布式计算,负责进行任务调度,协调 checkpoints,协调错误恢复等等。一个集群中至少有一个 JobManager,如果有多个 JobManager,其中一个作为 leader,其余处于备用的状态。
TaskManager
flink 集群的 worker 节点,真正执行 dataflow 中的 tasks,并且对 streams 进行缓存和交换,集群中至少需要一个 TaskManager,每个 TaskManager 是一个 JVM 进程。
Clients
连接 flink 集群 的客户端,向 flink 集群 提交计算任务
Task Slots
每个 TaskManager 都是一个 JVM 进程,可以在不同的线程运行一个或多个线程,每个 TaskManager 通过 Task Slots 来控制可以接收多少个tasks。
每个 Task Slots 代表 TaskManager 中一个固定的资源子集,如果 1 个 TaskManager 有 3 个 Task Slots,它会将他的内存资源划分为 3 份分配给每个 slot。
通过调整 Task Slots 的数量而调整 subtasks 之间的隔离方式。当每个 TaskManager 只有一个 Task Slot 的时候,意味着每个 task group 运行在独立的的JVM 中。当一个 TaskManager 有多个 slot 的时候,意味着多个 在同一 JVM 进程中的 task 将共享 TCP 链接和心跳信息,他们也能共享。
DateStream API
source: 数据来源
sink: 处理结果输出
window: 窗口