5分钟学会Flink大数据引擎能干什么

494 阅读4分钟

根据官方的说法,所谓的Flink是一个开源的大数据框架和分布式处理引擎,它由Apache软件基金会开源,用于在无界(有数据流的开始点,但没有数据流的结束点)和有界(有数据流的开始点,且有数据流的结束点)流数据上进行有状态的计算。

如图1.1所示,这是官网首页的一幅图,可以用来说明Flink常见的应用架构。

image.png 图1.1  Flink应用架构(来自官网)

从图中可以看出,Flink应用架构一般由多个Flink计算节点构成集群,在资源调度方面可以基于K8s(Kubernetes,简称K8s)、Yarn和Mesos等组件。在存储方面,可以支持HDFS、S3和NFS等文件系统。

在集群内部,不同节点可以进行数据交互,并可维护相关的状态数据,这样在计算过程中,如果发送异常,可以借助容错机制从中间状态进行数据恢复,这一点对于一个分布式应用程序来说至关重要。

Flink框架将复杂的分布式计算框架进行抽象,内部复杂的调度、计算过程对用户来说是透明的,用户只需关注具体的计算逻辑即可。如果将Fink应用集群看作是一个函数的话,它可以接收多种流数据输入作为参数,比如实时事件数据、传统数据库数据、文件系统数据以及键值对存储系统。这些各种类型的数据可以来自事务系统、日志、物联网设备以及网页点击流等。

另外,Fink可以将处理后的数据,输出到第三方应用系统、事件日志、数据库系统、文件系统以及键值对存储系统中。

Flink程序主要由Java语言或Scala语言开发,另外还支持Python语言。但其底层组件和Flink运行时(runtime)运行在JVM上,因此,Flink程序可以运行在多种平台上,如Linux、Unix、Mac OS X和Windows操作系统上。Flink能在计算机内存中进行分布式数据处理,因此计算速度非常快,且计算的延迟低。

官方给出了Flink用户在生产环境下得出的一些让人惊叹的数据:

l  Flink应用每天可以处理数万亿的事件。

l  Flink应用可以维护TB级别的状态信息。

l  Flink应用可以在数千个内核上运行。

l  Flink应用具有高吞吐、低延迟的特性。

官网也给出了一些Flink具有的优点,具体罗列如下:

l  适用于所有的流应用场景,如事件驱动应用、数据管道和ETL处理。

l  高级别的计算正确性保证,支持精确的一次语义,保证数据只被消费一次且无遗漏,这个一般是非常难实现的。另外,基于事件时间(Event time)和延迟机制可以处理延迟导致的乱序数据计算。

l  大规模集群计算能力,支持水平横向扩展、大规模状态存储以及增量检查点机制。当计算能力不足时,可以通过增加计算节点来提升总体计算能力。

l  应用运维成本低,支持多种部署模式,可以灵活部署。另外,高可用机制可以最大程度保证服务的稳定性,即使某个节点宕机,也不影响其他节点对外提供服务。

l  卓越的计算性能。通过在内存中进行数据计算,实现高吞吐和低延迟的数据处理能力,这点对于实时处理程序来说非常重要。

l  分层次的API。对于不同的开发用户而言,对API使用的偏好是不同的,Flink SQL API可以基于SQL语法来实现对流批数据的一体化处理,这个也更加友好。另外,还提供专门的DataStream API来处理流数据计算,DataSet API来处理批数据计算。对于上层不提供的功能,用户可以基于底层的API定制数据计算逻辑。

--节选自《Flink入门与实战》

088869-01.jpg