返回介绍

2.3 Apache Flink

发布于 2024-09-23 22:27:22 字数 2013 浏览 0 评论 0 收藏 0

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。

架构篇

image-20191204221003929

图 9 Flink 架构图

说明:Client 用来提交任务给 JobManager,JobManager 分发任务给 TaskManager 去执行,然后 TaskManager 会心跳的汇报任务状态。相对于 MR,TaskManager 之间是是流(Stream)。

  • JobManager: 负责作业调度,Jar 包管理,checkpoint 的协调和发起,应用的资源管理,根据应用的需要,向 ResourceManager 申请资源。
  • TaskManager :负责实际计算工作,包括 task 的启动销毁,内存管理,磁盘 IO,网络传输管理等。一个应用会分拆给多个 TaskManager 来进行计算。

image-20191204221027402

图 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 基于 YARN 的集群部署 流程

Flink 应用运行流程

图 Flink 应用运行流程

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文