首页 > 其他分享 >Flink API的4个层次

Flink API的4个层次

时间:2023-07-02 20:31:35浏览次数:35  
标签:DataStream 层次 Flink DataSet API SQL Table

从纵向来看Flink中的API分为4个层次,从下而上,API层次越高,抽象程度越高,使用起来越方便,灵活性则会降低。

Flink API的4个层次_Flink

1、核心底层API

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

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

ProcessFunction提供对时间和状态的细粒度控制能力,它可以处理事件时间和处理时间两种时间概念,在时间上定义、修改触发回调函数的触发器。因此,ProcessFunction可以实现许多有状态计算中的复杂业务逻辑。

2、核心开发API (DataStream/DataSet API)

DataStream/DataSet使用Fluent风格API,提供了常见数据处理的API接口,如用户指定的各种转换形式,包括连接(Join)、聚合(Aggregation)、窗口(Window)、状态(State)等。在这些API中处理的数据类型以各自的编程语言定义为Class类(Java类或者Scala类)。同时为了提供灵活性,DataStream/DataSet中也提供了直接使用底层ProcessFunction的能力,使得一些特定的操作可以实现更低层次的抽象如DataSet API为有界数据集提供了额外的原函数(如循环/迭代)。

3、声明式DSL API

Table API是以表为中心的声明式领域专用语言(Domain Specified Language,DSL)。表是关系型数据库的概念,用在批处理中。

Table API遵循(扩展)关系模型,使用Schema定义元数据(与关系数据库中的表相似),提供Table API实现SQL操作,如select、project、join、group-by、aggregate等。Table API表达的是“应该做什么”的逻辑操作,而不是编写如何处理数据的底层代码。

此外,Table API程序还可以通过在执行之前使用SQL优化器进行优化。可以在表和DataStream/DataSet之间无缝转换,允许程序中混合使用Table API和DataStream/DataSet API。

4、结构化API

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

SQL对复杂逻辑的语义表达不如DataStream API,但是SQL也带来了不少好处。

  • 缩短上线周期

传统的实现流计算的方式是通过流计算平台提供的API进行编程的,包括确定需求、实现设计、编写代码、进行本地单元测试、进行集成测试,没有问题后部署上线等流程。整个开发过程中,开发人员不光要满足业务需求,还需要关注技术实现的细节,而使用SQL的方式后,开发人员只要关注业务需求即可,技术实现的细节可以交给SQL引擎去解析、编译、优化。最终,相比传统的通过编码实现流计算的方式,上线周期可以从数天缩短为数小时。

  • 更好地支持流计算需求的演变

随着业务需求持续不断的变化,编码方式的开发、测试、部署上线的周期不能很快的响应业务需求的变化,使用SQL则能够缩短开发、测试、部署的周期。

  • 自动调优

查询优化器可以为用户的SQL生成最高效的执行计划。用户不需要了解它就能自动享受优化器带来的性能提升。

  • 接口稳定

SQL拥有几十年的历史,是一个非常稳定的语言,很少有变动。所以升级引擎的版本、甚至替换成另一个引擎时,都可以做到兼容并且平滑地升级。

  • 易于理解

SQL的学习门槛很低,很多不同行业不同领域的人都懂SQL,用SQL作为跨团队的开发语言可以大大提高效率。

在Flink1.9及以后的版本中,Flink会在API层面上统一DataStream流处理API和DataSet批处理API,DataSet API会逐渐被废弃,未来会使用DataStream API统一表达流批两种处理,作为流批统一的计算引擎,这种做法是合理的。

标签:DataStream,层次,Flink,DataSet,API,SQL,Table
From: https://blog.51cto.com/key3feng/6606936

相关文章

  • 从头学Java17-Stream API(一)
    StreamAPIStreamAPI是按照map/filter/reduce方法处理内存中数据的最佳工具。本系列中的教程包含从基本概念一直到collector设计和并行流。在流上添加中继操作将一个流map为另一个流map流是使用函数转换其元素。此转换可能会更改该流处理的元素的类型,但您也可以在不更改......
  • java -- 常见API` 1
        ......
  • WebApiApplication:WebApi操作
    [Route("/[controller]/[action]")][ApiController]publicclassCabinetController:ControllerBase{privatestaticIFreeSqlfreeSqlInstance=newFreeSqlBuilder().UseConnectionString(DataType.SqlServer,"DataSource=.;Initia......
  • 前端Vue基于腾讯地图Api实现的选择位置组件 返回地址名称详细地址经纬度信息
    前端Vue基于腾讯地图Api实现的选择位置组件返回地址名称详细地址经纬度信息, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13310效果图如下:使用方法<!--leftTitle:左边标题name:输入框名字value:输入框选择值 placeholder:占位符@clic......
  • BAPI-创建采购申请PR
    *&---------------------------------------------------------------------**&ReportZBAPI1*&*&---------------------------------------------------------------------**&*&*&----------------------------------------------------......
  • Eplan API -初始化
    EplanAPI-初始化Eplan支持的开发方式一共有3种脚本dll文件形式exe离线程式形式虽然eplan二次开发也支持vb语言,但这里只讨论c#脚本(script)Eplan脚本支持的功能有限,有限的原因在于其支持的程序集有限c#中的System;System.XML;System.Drawing;System.Windows.FormsEp......
  • JS中数组的22种常用API
    一、引言前端开发中,数组是一种常见且重要的数据结构。数组提供了许多便捷方便的方法来操作和处理其中的数据。本文将简单介绍前端开发中数组的常用API。二、22种常用方法2.1、push()和pop()push()方法用于向数组末尾增加一个元素,并返回数组最新的长度。constfruits=['......
  • 使用uni.app 里面 uni.chooseLocation api 打开地图位置 踩坑 踩坑 地图搜索 和列
    用 Android基座可以正常使用真机调试也可以用就是打包的时候打包完毕弹出地图之后搜索一直转圈  地图列表没有东西也是一直转圈里面有好多踩坑点  太狗了  要打包的 包名  和 dcloud里面的包名 和如果用高德地图里面的  packagename三......
  • Flink 核心技术与实战
    你将获得熟练掌握FlinkSQL接口的原理与操作方法;深入理解FlinkDataStreamAPI的实践原理;全面剖析FlinkRuntime的设计与实现机制;完整构建一个实时推荐数据流系统。课程介绍目前大部分公司的大数据处理工作,使用的还是离线处理技术,但未来,流式计算必定会成为分布式计算......
  • go使用consul-api注册服务、注销服务
    go使用consul-api注册服务、注销服务标签(空格分隔):go,consul安装包gogetgithub.com/hashicorp/consul/api注册、注销服务packageinitializeimport( "fmt" "github.com/hashicorp/consul/api" uuid"github.com/satori/go.uuid" "go.uber.org/zap&qu......