2.3 Apache Flink
2008 年,Flink 的前身已经是柏林理工大学一个研究性项目, 在 2014 被 Apache 孵化器所接受,然后迅速地成为了 ASF(Apache Software Foundation)的顶级项目之一。阿里巴巴内部 Flink 版本 Blink 于 2019 年 1 月正式开源。
Flink 是一个针对流数据和批数据的分布式处理引擎。它主要是由 Java 代码实现。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已。再换句话说,Flink 会把所有任务当成流来处理,这也是其最大的特点。Flink 可以支持本地的快速迭代,以及一些环形的迭代任务。并且 Flink 可以定制化内存管理。在这点,如果要对比 Flink 和 Spark 的话,Flink 并没有将内存完全交给应用层。这也是为什么 Spark 相对于 Flink,更容易出现 OOM 的原因(out of memory)。就框架本身与应用场景来说,Flink 更相似与 Storm。
架构篇
图 9 Flink 架构图
说明:Client 用来提交任务给 JobManager,JobManager 分发任务给 TaskManager 去执行,然后 TaskManager 会心跳的汇报任务状态。相对于 MR,TaskManager 之间是是流(Stream)。
- JobManager: 负责作业调度,Jar 包管理,checkpoint 的协调和发起,应用的资源管理,根据应用的需要,向 ResourceManager 申请资源。
- TaskManager :负责实际计算工作,包括 task 的启动销毁,内存管理,磁盘 IO,网络传输管理等。一个应用会分拆给多个 TaskManager 来进行计算。
图 10 Flink 的 Stack
说明:Flink 首先支持了 Scala 和 Java 的 API,Python 也正在测试中。Flink 通过 Gelly 支持了图操作,还有机器学习的 FlinkML。Table 是一种接口化的 SQL 支持,也就是 API 支持,而不是文本化的 SQL 解析和执行。
Flink 可配合使用的基本组件包括:
Stream(流) : 是指在系统中流转的,永恒不变的无边界数据集。包括 DataSet 和 DataStream。流数据源的接入,支持 HDFS 文件、kafka、文本数据等,具体参考 connector
Operator(操作方) :是指针对数据流执行操作以产生其他数据流的功能
Source(源) :是指数据流进入系统的入口点
Sink(槽) : 是指数据流离开 Flink 系统后进入到的位置,槽可以是数据库或到其他系统的连接器。数据输出,支持 HDFS、kafka、文本等。
Transformations:流数据转换
技术原理篇
图 Flink 基于 YARN 的集群部署 流程
图 Flink 应用运行流程
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论