大纲:
- Flink概述
- Flink应用场景
- Flink Layer
- Flink发展趋势
- Flink应用程序运行方式
- Flink和Spark、Storm的对比
1、Flink概述
1.1 Flink是什么
Apache Flink is a framework and distributed processing engine
for stateful computations over
unbounded and bounded data streams.
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。
1.2 Unbounded vs Bounded Data
Unbounded Data: 无界数据(有头无尾)
Bounded Data: 有界数据(有头有尾)
2、Flink应用场景
Apache Flink因其丰富的功能而成为开发和运行多种不同类型应用程序的绝佳选择。Flink的功能包括对流和批处理的支持,复杂的状态管理,事件时间处理语义以及状态的一致性保证。此外,Flink可以部署在各种资源管理器上(如YARN,Apache Mesos和Kubernetes),也可以作为裸机硬件上的独立群集。Flink配置为高可用性,没有单点故障。Flink提供高吞吐量和低延迟,并为世界上一些最苛刻的流处理应用程序提供支持。
Flink提供支持的最常见类型的应用程序:
- 事件驱动型的应用程序
- 数据分析型的应用程序
- 数据管道型的应用程序
事件驱动型的应用程序
事件驱动型的应用程序是一个有状态的应用程序,它从一个或多个事件流中提取事件,并通过触发计算、状态更新或外部操作对传入事件做出反应。
传统应用程序设计具有分离的计算和数据存储层,在此体系结构中,应用程序从远程事务数据库中读取数据并将数据持久化。
相反,事件驱动的应用程序基于有状态流处理应用程序。在这种设计中,数据和计算是共同定位的,这产生了本地(内存或磁盘)数据访问。通过定期将检查点写入远程持久存储来实现容错。
事件驱动的应用程序不是查询远程数据库,而是在本地访问其数据,从而在吞吐量和延迟方面产生更好的性能。远程持久存储的检查点可以异步和递增完成。因此,检查点对常规事件处理的影响非常小。
几种典型的事件驱动型应用程序:
-
欺诈识别
-
异常检测
-
基于规则的警报
-
业务流程监控
-
Web应用程序(社交网络)
数据分析型应用程序
数据分析工作从原始数据中提取信息。传统上,数据分析是在记录事件的有界数据集上作为批量查询或应用程序执行。为了将最新数据合并到分析结果中,必须将其添加到分析的数据集中,并重新运行查询或应用程序。结果将写入存储系统或作为报告发出。
借助先进的流处理引擎,还可以实时地执行分析。流式查询或应用程序不是读取有限数据集,而是摄取实时事件流,并在消耗事件时不断生成和更新结果。结果要么写入外部数据库,要么保持为内部状态。仪表板应用程序可以从外部数据库读取最新结果或直接查询应用程序的内部状态。Apache Flink支持流式和批量分析应用程序。
与批量分析相比,连续流分析的优势不仅限于低延迟。与批量查询相比,流式查询不必处理输入数据中的人为边界,这些边界是由定期导入和输入的有界性质引起的。
另一方面是更简单的应用程序架构。批量分析管道由若干独立组件组成,以定期调度数据提取和查询执行。可靠地操作这样的管道并非易事,因为一个组件的故障会影响管道的后续步骤。相比之下,在像Flink这样的复杂流处理器上运行的流分析应用程序包含从数据摄取到连续结果计算的所有步骤。
几种典型的数据分析型应用程序:
-
电信网络的质量监控
-
分析移动应用程序中的产品更新和实验评估
-
对消费者技术中的实时数据进行特别分析
-
大规模图分析
数据管道型应用程序
提取 - 转换 - 加载(ETL)是在存储系统之间转换和移动数据的常用方法。通常会定期触发ETL作业,以将数据从事务数据库系统复制到分析数据库或数据仓库。
数据管道与ETL作业具有相似的用途。它们可以转换和丰富数据,并可以将数据从一个存储系统移动到另一个存储系统。但是,它们以连续流模式运行,而不是定期触发。因此,他们能够从连续生成数据的源中读取记录,并以低延迟将其移动到目的地。例如,数据管道可能会监视文件系统目录中的新文件并将其数据写入事件日志。
连续数据流水线优于周期性ETL作业的原因是减少了将数据移动到目的地的延迟。此外,数据管道更通用,可用于更多用例,因为它们能够连续消耗和发送数据。
几种典型的数据管道型应用:
-
电子商务中的实时搜索索引构建
-
电子商务中持续的ETL
3、Flink Layer(API分层)
4、Flink发展趋势
阿里收购了Flink母公司,而阿里内部原来使用Blink。
Flink + Blink = ? 我们拭目以待。
5、Flink应用程序运行方式
Flink设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。
部署应用程序在任何地方
Apache Flink是一个分布式系统,需要计算资源来执行应用程序。Flink集成了所有常见的集群资源管理器,如Hadoop YARN、Apache Mesos和Kubernetes,但也可以设置为作为独立集群运行。
Flink被设计成能够很好地工作于前面列出的每个资源管理器。这是通过特定于资源管理器的部署模式实现的,这种部署模式允许Flink以其惯用的方式与每个资源管理器交互。
在部署Flink应用程序时,Flink根据应用程序的配置并行性自动识别所需的资源,并从资源管理器请求它们。如果发生故障,Flink将通过请求新的资源来替换失败的容器。提交或控制应用程序的所有通信都是通过REST调用进行的。这简化了Flink在许多环境中的集成。
以任何规模运行应用程序
Flink设计用于在任何规模上运行有状态流应用程序。应用程序被并行化成数千个任务,这些任务分布在一个集群中并发执行。因此,应用程序实际上可以利用无限数量的cpu、主内存、磁盘和网络IO。此外,Flink很容易保持非常大的应用状态。它的异步和增量检查点算法确保了对处理延迟的最小影响,同时保证了精确的一次状态一致性。
利用内存中的性能
有状态Flink应用程序针对本地状态访问进行了优化。任务状态总是在内存中维护,如果状态大小超过可用内存,则在具有访问效率的磁盘数据结构中维护。因此,任务通过访问本地(通常是在内存中)状态来执行所有计算,从而产生非常低的处理延迟。Flink通过定期和异步检查本地状态到持久存储,保证了在发生故障时的精确一次状态一致性。
6、Flink和Spark、Storm的对比