概述Flink API中的4个层次

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 【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轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
8天前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
36 8
|
2月前
|
SQL 关系型数据库 API
实时计算 Flink版产品使用问题之如何使用stream api
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
Kubernetes Oracle 关系型数据库
实时计算 Flink版操作报错合集之用dinky在k8s上提交作业,会报错:Caused by: org.apache.flink.table.api.ValidationException:,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
190 0
|
2月前
|
SQL 存储 API
Flink(十五)【Flink SQL Connector、savepoint、CateLog、Table API】(5)
Flink(十五)【Flink SQL Connector、savepoint、CateLog、Table API】
|
SQL 消息中间件 API
Flink关系型API的公共部分
关系型程序的公共部分 下面的代码段展示了Table&SQL API所编写流式程序的程序模式: val env = StreamExecutionEnvironment.getExecutionEnvironment //创建TableEnvironment对象 val tableEnv = TableEnvironment.
2741 0
|
17天前
|
存储 监控 大数据
阿里云实时计算Flink在多行业的应用和实践
本文整理自 Flink Forward Asia 2023 中闭门会的分享。主要分享实时计算在各行业的应用实践,对回归实时计算的重点场景进行介绍以及企业如何使用实时计算技术,并且提供一些在技术架构上的参考建议。
564 7
阿里云实时计算Flink在多行业的应用和实践
|
1月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
存储 JSON Kubernetes
实时计算 Flink版操作报错合集之 写入hudi时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
SQL 流计算
实时计算 Flink版操作报错合集之怎么向一个未定义列的表中写入数据
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
资源调度 分布式计算 Hadoop
实时计算 Flink版操作报错合集之perjob提交给yarn,报错显示无法连接yarn- Connecting to ResourceManager,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。