初识Flink(学习Flink之路一)

Apache Flink(以下称Flink)是大数据实时流处理计算框架,相对Apache Spark,Spark Streaming 是把批处理按时间切割成很小的片,然后执行微批处理,近似流处理的一个状态;Flink是基于流处理,在Flink中认为Dataset其实就是一个有界的数据流,DataStream是一个无界的数据流,都是当做流来处理,更能保障低延迟。

Flink的优势:

1、同时支持高吞吐、低延迟、高性能
2、支持事件时间(Event Time)概念
3、支持有状态计算
4、支持高度灵活的窗口(Window)操作
5、基于轻量级的分布式快照(Snapshot)实现的容错
6、基于JVM实现独立的内存管理
7、Save Points(保存点)

Flink基本架构

1、编程模型
Flink 编程模型抽象
1.1、最低级抽象只提供有状态流。通过Process Function嵌入到DataStream API中。它允许用户自由处理来自一个或多个流的事件,并使用一致的容错状态。此外,用户可以注册事件时间和处理时间,允许程序实现复杂的计算。
1.2、实际使用中一般不用这么低等级的API,会使用稍微封装过一点的DataStream/DataSet API,分别针对无界数据流和有界数据流。
1.3、Table API 声明的可被动态改变的表,更高层次的封装让其没有DataStream/DataSet API的灵活性,但是带来了更快捷开发和相对较低的入门门槛,也让代码看起来更简洁;此外,Table API程序还会通过优化程序,在执行之前应用优化规则。Table API 可以和DataStream/DataSet API相互转换。允许程序混合Table API以及DataStream 和DataSet API。
1.4、Flink提供的最高级抽象是SQL。这种抽象在语义和表达方面类似于Table API,只是将程序表示为SQL查询表达式。SQL查询可以通过创建表来执行Table API。

基本架构

Flink 整个系统主要由两部分组成,JobManager和TaskManager,Flink架构也是遵从Master-Slave架构设计原则,JobManager为Master节点,TaskManager为Slave节点。所有组件之间通信借助于Akka Framework,包括任务的状态以及Checkpoint触发信息。
1、client 客户端
客户端负责提交任务到集群,于JobManager构建Akka 连接,然后将任务提交到JobManager,通过和JobManager之间进行交互获取任务状态。

2、JobManager
JobManager 负责整个Flink集群任务调度和资源管理,从客户端中获取提交的应用,然后根据集群中TaskManager上TaskSlot的使用情况,为提交的应用分配相应的TaskSlots资源,并命令TaskManager 启动从客户端获取的应用。
JobManager 和 TaskManager 之间通过 Actor System 通信,获取任务的执行情况并通过 Actor System 将应用的情况发送给客户端。
JobManager 会触发Checkpoint 操作,每个TaskManager 节点收到Checkpoint 触发指令后,完成Checkpoint 操作。

3、TaskManager
TaskManager 负责具体的任务执行和对应任务在每个节点上的资源申请与管理。

Flink 程序的构成

Flink程序的基本构建是 streams 和 transformations。(请注意,Flink的DataSet API中使用的DataSet也是内部流 - 稍后会详细介绍。)从概念上讲,streams 是(可能永无止境的)数据记录流,而transformations是将一个或多个streams 作为输入,并产生一个或多个输出streams 。
执行时,Flink程序映射到 streaming dataflows,由streams 和 transformations运算符组成。每个数据流都以一个或多个sources 开头,并以一个或多个 sinks 结束。 streaming dataflows类似于有向无环图 (DAG)。
在这里插入图片描述

并行数据流

Flink中的程序本质上是分布式并行的。在执行期间,流具有一个或多个流分区,并且每个operator 具有一个或多个operator subtasks。operator subtasks彼此独立,并且可以在不同的线程中执行,并且可能在不同的机器或容器上执行。
operator subtasks的数量是该特定operator 的并行度。流的并行性既是其生成operator的并行性。同一程序的不同operator 可能具有不同的并行级别。
 并行数据流

概念的学习总是枯燥无聊的,今天就到这吧,作为一个菜鸟,如果各位大佬在看博客的过程中发现什么问题,欢迎随时批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值