千家信息网

Flink批流一体实现原理是什么

发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,本篇文章为大家展示了Flink批流一体实现原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。实现批处理的技术许许多多,从各种关系型数据库的sql处理,到
千家信息网最后更新 2025年02月06日Flink批流一体实现原理是什么

本篇文章为大家展示了Flink批流一体实现原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

实现批处理的技术许许多多,从各种关系型数据库的sql处理,到大数据领域的MapReduce,Hive,Spark等等。这些都是处理有限数据流的经典方式。而Flink专注的是无限流处理,那么他是怎么做到批处理的呢?

无限流处理:输入数据没有尽头;数据处理从当前或者过去的某一个时间 点开始,持续不停地进行

另一种处理形式叫作有限流处理,即从某一个时间点开始处理数据,然后在另一个时间点结束。输入数据可能本身是有限的(即输入数据集并不会随着时间增长),也可能出于分析的目的被人为地设定为有限集(即只分析某一个时间段内的事件)。

显然,有限流处理是无限流处理的一种特殊情况,它只不过在某个时间点停止而已。此外,如果计算结果不在执行过程中连续生成,而仅在末尾处生成一次,那就是批处理(分批处理数据)。

批处理是流处理的一种非常特殊的情况。在流处理中,我们为数据定义滑 动窗口或滚动窗口,并且在每次窗口滑动或滚动时生成结果。批处理则不同,我们定义一个全局窗口,所有的记录都属于同一个窗口。举例来说, 以下代码表示一个简单的Flink 程序,它负责每小时对某网站的访问者计数,并按照地区分组。

val counts = visits
.keyBy("region")
.timeWindow(Time.hours(1))
.sum("visits")

如果知道输入数据是有限的,则可以通过以下代码实现批处理。

val counts = visits
.keyBy("region")
.window(GlobalWindows.create)
.trigger(EndOfTimeTrigger.create)
.sum("visits")

Flink 的不寻常之处在于,它既可以将数据当作无限流来处理,也可以将它当作有限流来处理。Flink 的 DataSet API 就是专为批处理而生的,如下所示。

val counts = visits
.groupBy("region")
.sum("visits")

如果输入数据是有限的,那么以上代码的运行结果将与前一段代码的相同, 但是它对于习惯使用批处理器的程序员来说更友好。

Fink批处理模型

Flink 通过一个底层引擎同时支持流处理和批处理

在流处理引擎之上,Flink 有以下机制:

  • 检查点机制和状态机制:用于实现容错、有状态的处理;

  • 水印机制:用于实现事件时钟;

  • 窗口和触发器:用于限制计算范围,并定义呈现结果的时间。

在同一个流处理引擎之上,Flink 还存在另一套机制,用于实现高效的批处理。

  • 用于调度和恢复的回溯法:由 Microsoft Dryad 引入,现在几乎用于所有批处理器;

  • 用于散列和排序的特殊内存数据结构:可以在需要时,将一部分数据从内存溢出到硬盘上;

  • 优化器:尽可能地缩短生成结果的时间。

两套机制分别对应各自的API(DataStream API 和 DataSet API);在创建 Flink 作业时,并不能通过将两者混合在一起来同时 利用 Flink 的所有功能。

在最新的版本中,Flink 支持两种关系型的 API,Table API 和 SQL。这两个 API 都是批处理和流处理统一的 API,这意味着在无边界的实时数据流和有边界的历史记录数据流上,关系型 API 会以相同的语义执行查询,并产生相同的结果。Table API 和 SQL 借助了 Apache Calcite 来进行查询的解析,校验以及优化。它们可以与 DataStream 和 DataSet API 无缝集成,并支持用户自定义的标量函数,聚合函数以及表值函数。

Table API / SQL 正在以流批统一的方式成为分析型用例的主要 API。

DataStream API 是数据驱动应用程序和数据管道的主要API。

从长远来看,DataStream API应该通过有界数据流完全包含DataSet API。

Flink批处理性能

MapReduce、Tez、Spark 和 Flink 在执行纯批处理任务时的性能比较。测试的批处理任务是 TeraSort 和分布式散列连接。

第一个任务是 TeraSort,即测量为 1TB 数据排序所用的时间。

TeraSort 本质上是分布式排序问题,它由以下几个阶 段组成:

(1) 读取阶段:从 HDFS 文件中读取数据分区;

(2) 本地排序阶段:对上述分区进行部分排序;

(3) 混洗阶段:将数据按照 key 重新分布到处理节点上;

(4) 终排序阶段:生成排序输出;

(5) 写入阶段:将排序后的分区写入 HDFS 文件。

Hadoop 发行版包含对 TeraSort 的实现,同样的实现也可以用于 Tez,因为 Tez 可以执行通过MapReduce API 编写的程序。Spark 和 Flink 的 TeraSort 实现由 Dongwon Kim 提供.用来测量的集群由 42 台机器组成,每台机器 包含 12 个 CPU 内核、24GB 内存,以及 6 块硬盘。

结果显示,Flink 的排序时间比其他所有系统都少。MapReduce 用了2157 秒,Tez 用了1887 秒,Spark 用了2171 秒,Flink 则 只用了 1480 秒。

第二个任务是一个大数据集(240GB)和一个小数据集(256MB)之间的分布式散列连接。结果显示,Flink 仍然是速度最快的系统,它所用的时间分别是 Tez 和 Spark 的 1/2 和 1/4.

产生以上结果的总体原因是,Flink 的执行过程是基于流的,这意味着各个处理阶段有更多的重叠,并且混洗操作是流水线式的,因此磁盘访问操作更少。相反,MapReduce、Tez 和 Spark 是基于批的,这意味着数据在通过网络传输之前必须先被写入磁盘。该测试说明,在使用Flink 时,系统空闲时间和磁盘访问操作更少。

值得一提的是,性能测试结果中的原始数值可能会因集群设置、配置和软件版本而异。

因此,Flink 可以用同一个数据处理框架来处理无限数据流和有限数据流,并且不会牺牲性能。

上述内容就是Flink批流一体实现原理是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

数据 处理 时间 结果 有限 排序 机制 阶段 数据流 生成 输入 代码 任务 性能 程序 特殊 相同 内存 函数 分布式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 政府人员网络技术 ecs 云服务器是什么 对象存储服务器是要数据库吗 广西2u工控服务器机箱厂商 未来的网络安全重要吗 江苏盱眙网络安全大队电话 中国科技核心期刊数据库源期刊 方舟端游优质服务器 马鞍山软件开发培训多少钱 浙江防爆刀片服务器直销 国安局检查单位网络安全自查报告 河北新一代软件开发服务品质保障 陈雪.无源光网络技术 联想服务器插内存 河南交友软件开发价钱是多少 龙岗软件开发哪家效益快 江苏辅助计算机网络技术服务优势 深圳升途网络技术做什么的 查询不到服务器角色信息 数据库类型的变量 欧洲成人网站服务器 超泽网络技术有限公司 《护苗 网络安全课》报告 mc服务器的日常 源码的数据库是什么文件夹 人间地狱cn81服务器 维普数据库还有那种检索途径 数据库管理系统简介 福道网络技术服务 致远oa服务器配置
0