概述Flink API中的4个层次

简介: 【7月更文挑战第14天】Flink的API分为4个层次:核心底层API(如ProcessFunction)、DataStream/DataSet API、Table API和SQL。

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

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统一表达流批两种处理,作为流批统一的计算引擎,这种做法是合理的。

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
10月前
|
SQL 人工智能 关系型数据库
Flink CDC YAML:面向数据集成的 API 设计
本文整理自阿里云智能集团 Flink PMC Member & Committer 徐榜江(雪尽)在 FFA 2024 分论坛的分享,涵盖四大主题:Flink CDC、YAML API、Transform + AI 和 Community。文章详细介绍了 Flink CDC 的发展历程及其优势,特别是 YAML API 的设计与实现,以及如何通过 Transform 和 AI 模型集成提升数据处理能力。最后,分享了社区动态和未来规划,欢迎更多开发者加入开源社区,共同推动 Flink CDC 的发展。
756 12
Flink CDC YAML:面向数据集成的 API 设计
|
9月前
|
XML 网络协议 API
从cURL到GraphQL:不同API类型概述
本文概述了不同API类型及其应用,帮助开发人员选择合适的工具。cURL是强大的命令行工具,适用于调试和自动化;RESTful API基于HTTP方法,适合Web服务和微服务架构;SOAP用于企业级应用,提供高安全性;GraphQL通过精确查询减少数据传输;WebSocket支持实时通信,适用于低延迟场景。了解这些API的特点和优势,有助于构建高效、可扩展的应用程序。
|
9月前
|
SQL 人工智能 关系型数据库
Flink CDC YAML:面向数据集成的 API 设计
Flink CDC YAML:面向数据集成的 API 设计
418 5
|
10月前
|
JSON 供应链 API
1688寻源通API接口概述
1688寻源通API接口是1688开放平台为采购商提供的商品/供应商搜索与匹配服务接口
|
10月前
|
存储 搜索推荐 API
淘宝拍立淘按图搜索API接口系列概述
淘宝拍立淘按图搜索API接口允许用户通过上传图片或拍摄实物来搜索相似或相同的商品。这一功能主要依赖于图像识别技术,系统会对上传的图片进行分析和处理,提取出商品的特征信息,并在淘宝的商品数据库中进行匹配搜索,最终返回与上传图片相似或相同的商品列表。
|
9月前
|
存储 JSON API
淘宝商品详情API接口概述与JSON数据示例
淘宝商品详情API是淘宝开放平台提供的核心接口之一,为开发者提供了获取商品深度信息的能力。以下是技术细节和示例:
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
323 125
|
JSON 安全 API
淘宝商品详情API接口(item get pro接口概述)
淘宝商品详情API接口旨在帮助开发者获取淘宝商品的详细信息,包括商品标题、描述、价格、库存、销量、评价等。这些信息对于电商企业而言具有极高的价值,可用于商品信息展示、市场分析、价格比较等多种应用场景。
|
数据采集 监控 数据挖掘
常用电商商品数据API接口(item get)概述,数据分析以及上货
电商商品数据API接口(item get)是电商平台上用于提供商品详细信息的接口。这些接口允许开发者或系统以编程方式获取商品的详细信息,包括但不限于商品的标题、价格、库存、图片、销量、规格参数、用户评价等。这些信息对于电商业务来说至关重要,是商品数据分析、价格监控、上货策略制定等工作的基础。
|
供应链 数据挖掘 API
电商API接口介绍——sku接口概述
商品SKU(Stock Keeping Unit)接口是电商API接口中的一种,专门用于获取商品的SKU信息。SKU是库存量单位,用于区分同一商品的不同规格、颜色、尺寸等属性。通过商品SKU接口,开发者可以获取商品的SKU列表、SKU属性、库存数量等详细信息。