前文我们写了一个WordCount程序体验了一下flink程序的编写。在本篇中我们详细学习下flink api的分类及其应用场景。

Flink’s API

flink提供了4个层次的api抽象:
在这里插入图片描述

  • 在最下层,就是有状态流式编程,它提供了ProcessFunctionAPI。flink在这个底层api上帮我们实现了最基础的流式处理能力,我们可以在上门进行有状态编程,并且我们可以自定义定时器,可以实现复杂的时间语义处理。(注意:ProcessFunction是嵌入到DataStreamAPI中使用的)。
  • 在core api层,flink提供了DataStreamAPI和DataSetAPI。这两个API提供了数据处理的基本操作:各种数据转化(map,flatmap,filter等等),分组,join,window,状态编程等等。我们在前文写的WordCount程序就是基于DataStreamAPI实现的。
  • Table API是基于表的声明式dsl。它与DataStream区别主要在以下几个方面:
    1. 遵循关系型数据模型,自带schema,提供了类sql操作,如select,project,join,group-by等等。
    2. 声明式api,指定数据处理逻辑,不指定代码实现逻辑
    3. 可实现udf,但是表达力不如core api
    4. 在执行前,计划器会优化执行逻辑
    5. Table可与DataStream/DataSet无缝转化。
  • flink提供的最高层api是flink-sql。它的抽象层次与Table API类似,但是允许用户直接写sql便可以执行job,而无需会写java或scala代码。

这四层关系很好理解,简单总结一下,主要是有以下两点:

1. 越往上层,开发人员写的代码越简洁,面向的开发人员越广。

2. 越往上层,处理的数据越结构化,功能灵活性越低。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐