从零开始flink-flink基本操作

本文详细介绍了Flink的架构,包括Flink工作流程、运行时架构,重点讲解了JobManager、ResourceManager、TaskManager的角色。此外,还探讨了批处理、有无状态计算、DataStream API的使用、并行度和物理分区等概念,为理解Flink提供了全面的指导。
摘要由CSDN通过智能技术生成
Flink架构

以流处理为设计核心,支持多中计算框架,可简单部署在多种资源管理架构上
在这里插入图片描述

Flink工作流程

(1)消息传输层从各种数据源(生产者)采集连续事件产生的数据,并传输给订阅了这些数据的应用程序和服务(消费者)
(2)流处理层有3个用途:
持续地将数据在应用程序和系统间移动;
聚合并处理事件
在本地维持应用程序的状态
(3)使用checkpoint,保证数据一致性。该方法正常状态下开销较小

在Flink中进行批处理*


⬆这部分没看懂

有无状态计算

无状态指输入流经过某种处理可以直接输出
有状态指,输入流在输入后要和状态进行比对,才能进行处理,并且状态不同,处理结果不同
一致性
在这里插入图片描述
flink通过检查点来保证有状态计算与一致性即:
在checkpoint之前的计算一定在之前完成,checkpoint相当于一个快照。

Flink运行时架构

JobManager

在作业提交时,JobMaster 会先接收到要执行的应用。这里所说“应用”一般是客户端提交来的,包括:Jar 包,数据流图(dataflow graph),和作业图(JobGraph)。
JobMaster 会把 JobGraph 转换成一个物理层面的数据流图,这个图被叫作“执行图”(ExecutionGraph),它包含了所有可以并发执行的任务。 JobMaster 会向资源管理器(ResourceManager)发出请求,申请执行任务必要的资源。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的 TaskManager 上。
而在运行过程中,JobMaster 会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。

ResourceManager

ResourceManager 主要负责资源的分配和管理,在 Flink 集群中只有一个。
任务槽(task slots)就是 Flink 集群中的资源调配单元,包含了机器用来执行计算的一组 CPU 和内存资源。每一个任务(Task)都需要分配到一个 slot 上执行。
ResourceManager 针对不同的环境和资源管理平台有不同的具体实现。Standalone 部署时,TaskManager单独启动,task slots已经预设好。在有资源管理平台时, ResourceManager可以向资源提供平台发起会话,请求提供启动 TaskManager 进程的容器,还负责停掉空闲的 TaskManager,释放计算资源。

Dispatcher

Dispatcher 主要负责提供一个 REST 接口,启动JobMaster,Web UI。并不是必需的。

TaskManager

TaskManager 会向ResourceManager注册它的 slots,收到资源管理器的指令(task)后,TaskManager 就会将一个或者多个slots提供给 JobMaster 调用。
在这里插入图片描述

YARN 集群

会话(Session)模式

启动YARN session->启动 JobManager( ResourceManager 和 Dispatcher)。而 TaskManager 可以根据需要动态地启动
在这里插入图片描述
TaskManager由YARN启动,TaskManager 启动之后,仅向 Flink 的ResourceManager 注册slots(怎么回收slots?)

单作业(Per-Job)模式

在这里插入图片描述
作业直接提交给YARN,YARN将集群作为资源进行管理(又同时管理了TaskManager?)

数据流图(Dataflow Graph)

流式计算可以看作数据在算子(Operator)构成的管道中流动。
Flink 程序都可以归纳为由三部分构成:Source、Transformation 和 Sink。

-Source 表示“源算子”,负责读取数据源。
-Transformation 表示“转换算子”,利用各种算子进行处理加工。
-Sink 表示“下沉算子”,负责数据的输出。
Dataflow Graph就是算子构成的DAG。

并行度(Parallelism)

相对于“任务并行”,我们真正关心的,是“数据并行”。也就是说,多条数据同时到来,我们应该可以同时读入,同时在不同节点执行Map操作。
将算子部署在多个节点,对于一个task,在多个节点并行计算,即实现数据并行(流水线与超标量流水线?)
一个特定算子的子任务(subtask)的个数被称之为其并行度(parallelism),一个流程序的并行度,可以认为就是其所有算子中最大的并行度。
分区(stream partition)指系统中每条完整stream为一个分区(?)
代码设置并行度

stream.map(word -> Tuple2.of(word, 1L)).setParallelism(2); //一般用这个,使用命令行配置更好?
env.setParallelism(2);、、一般不用

算子链(Operator Chain)

算子之间传输数据的形式可以是forwarding和redistributing。
forwarding中的operate聚合在一起称为operate chain。这样一个operate chain聚合成一个task,既减少了网络传输压力也提高了缓存使用率。

// 禁用算子链
.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值