Flink 编程接口(Flink SQL Table API DataStream API 和 DataSet API Stateful Stream Process API)

Flink 根据数据集类型的不同将核心数据处理接口分为两大类,一类是支持批计算的接口DataSet API,另外一类是支持流计算的接口 DataStream API。同时 Flink将数据处理接口抽象成四层,由上向下分别为SQL APITable APIDataStream /DataSet API以及Stateful Stream Processing API,用户可以根据需要选择任意一层抽象接口来开发Flink应用。

Flink SQL

从下图中可以看出,Flink提供了统一的SQL API完成对批计算和流计算的处理,目前SQL API也是社区重点发展的接口层,对SQL API也正在逐步完善中,其主要因为SQL语言具有比较低的学习成本,能够让数据分析人员和开发人员更快速地上手,帮助其更加专注于业务本身而不是受限于复杂的编程接口。而且在后期版本升级等底层架构发生变化时,能够自如应对,无需修改。SQL 构建在 Table 之上,都需要构建 Table环境。

Table API

Table API将内存中的 DataStream和 DataSet数据集在原有的基础之上增加 Schema信息,将数据类型统一抽象成表结构,然后通过Table API提供的接口处理对应的数据集。SQL API则可以直接查询 Table API中注册表中的数据表。Table API构建在DataStream和 DataSet之上的同时,提供了大量面向领域语言的编程接口,例如 GroupByKey、Join等操作符,提供给用户一种更加友好的处理数据集的方式。除此之外,Table API在转换为 DataStream和 DataSet的数据处理过程中,也应用了大量的优化规则对处理逻辑进行了优化。同时 Table API中的 Table可以和 DataStream 及 DataSet之间进行相互转换。

DataStream API 和 DataSet API

DataStream API 和 DataSet API主要面向具有开发经验的用户,用户可以使用DataStream API处理无界流数据,使用DataSet API处理批量数据。DataStream API和 DataSet API接口同时提供了各种数据处理接口,例如 map,filter、oins、aggregations、window等方法,同时每种接口都支持了Java、Scala及 Python等多种开发语言的SDK。

Stateful Stream Process API

Stateful Stream Process API是 Flink中处理 Stateful Stream最底层的接口,通过 process function 嵌入到 DataStream API 中。用户可以使用 Stateful Stream Process 接口操作状态、时间等底层数据。使用Stream Process API接口开发应用的灵活性非常强,可以实现非常复杂的流式计算逻辑,但是相对用户使用成本也比较高。实际中,大多数应用程序并不需要最底层的stateful streaming,一般企业在使用 Flink进行二次开发或深度封装的时候会用到这层接口。主要处理 events,state,time

posted @ 2020-11-21 20:15  Java程序员进阶  阅读(1543)  评论(0编辑  收藏  举报