Flink 内核原理与实现-应用

一、Flink应用开发

Flink作为流批一体的计算引擎,其面对的是业务场景,面向的使用者是开发人员和运维管理人员。

Flink应用程序,也叫Flink作业、FlinkJob.Flink作业包含了两个基本的块:数据流(DataStream)和转换(Tranformation)。DataStream是逻辑概念,为开发者提供了API接口,Transformation是处理行为的抽象,包含了数据的读取、计算、写出。所以Flink的作业中的DataStreamAPI调用,实际上构建了多个由Transformation组成的数据处理流水线(Pipline)。

执行时,Flink应用被映射成DataFlow,由数据流和转换操作组成。每个DataFlow从一个或多个数据源开始,并以一个或多个Sink输出结束。DataFlow本质上是一个有向无环图(DAG),但是允许通过迭代构造特殊形式的有向无环图。

Flink应用由相同的基本部分组成:

  • 获取参数(可选)

        如果有配置参数,则读取配置参数,可以是命令输入的参数,也可以是配置文件。

  • 初始化Stream执行环境

        这是必须要做的,读取数据的API依赖于该执行环境。

  • 配置参数

        读取到的参数可以是执行环境参数或者业务参数。这些参数会覆盖flink.conf中默认的配置参数。

  • 读取外部数据

        Flink作为分布式执行引擎,本身没有数据存储能力,所以定义了一系列接口、连接器与外部存储进行交互,读写数据。

  • 数据处理流程

        调用DataStream的API组成数据处理的流程,如调用DataStream.map().filter()……组成一个数据流水线。

  • 将处理结果写入外部

        在Flink中将数据写入外部的过程叫做Sink,Flink支持写出数据到Kafka、HDFS、Hbase等外部存储。

  • 触发执行

        StreamExecutionEnvironment#execute是Flink应用执行的触发入口,无论是一般的DataStreamAPI开发还是Table&SQL开发都是如此。

二、API层次

API层次如图:

 

  • 核心底层API

        核心底层API提供了Flink的最底层的分布式计算构建块的操作API,包含了ProcessFunction、状态、时间和窗口等操作的API。

        ProcessFunction是Flink提供的最具表现力的底层功能接口。Flink提供单流输入的ProcessFunction和双流输入的CoProcessFuntion,能够对单个事件进行计算,也能够按照窗口对时间进行计算。

  • 核心开发API(DataStream/DataSet)

         DataStream/DataSet使用Fluent风格API,提供了常见数据处理的API接口,如用户指定的各种转换形式,包括连接(Join)、聚合(Aggregation)、窗口(Window)、状态(State)等。

  • 声明式DSL API

        Table API是以表为中心的声明式领域专用语言(Domain Specified Language,DSL)。表是关系型数据库的概念,用在批处理中。在流计算中,为了引入动态表的概念(Dynamic Table),用来表达数据流表。

  • 结构化API

        SQL是Flink的结构化API,是最高层次的计算API,与Table API基本等价,区别在于使用的方式。SQL与Table API可以混合使用,SQL可以操作Table API 定义的表,Table API也能操作SQL定义的表和中间结果。

三、数据流

数据流是核心数据抽象,表示一个持续产生的数据流。

DataStream体系如图:

 

DataStreamSource本身就是一个DataStream。DataStreamSink、AsyncDataStream、BroadcastDataStream、BroadcastConnectedDataStream、QueryableDataStream都是对一般DataStream对象封装。

  • DataStream

        DataStream是Flink数据流的抽象核心,其上定义了对数据流的一系列操作,同时也定义了与其他类型DataStream的相互转换关系。每个DataStream都有一个Transformation对象,表示该DataStream从上游的DataStream使用该Transformation而来。

  • DataStreamSource

        DataStreamSource是DataStream的起点,DataStreamSource在StreamExecutionEnvironment中创建,由StreamExecutionEnvrionment.addSource(SourceFunction)创建而来,其中SourceFunction中包含了DataStreamSource从数据源读取数据的具体逻辑。

  • DataStreamSink
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值