Flink 编程接口
欢迎来 kk大数据,今天分享的是 Flink 提供了哪些编程接口可以给我们开发。
现实世界中,所有的数据都是以流式的形态产生的,不管是哪里产生的数据,在产生的过程中都是一条条地生成,最后经过了存储和转换处理,形成了各种类型的数据集。
根据现实世界中,数据产生方式和数据产生是否含有边界(具有起始点和终止点)角度,将数据分为两种类型的数据集,一种是有界数据集,另外一种是无界数据集。
(1)有界数据集
有界数据具有时间边界,在处理过程中数据一定会在某个时间范围内起始和结束,有可能是一分钟,也有可能是一天内的交易数据。
对有界数据集的数据处理方式被称为批计算,例如将数据从 RDBMS 或文件系统中读取出来,然后在分布式系统内处理,最后再将处理结果写入存储介质中,整个过程就被称为批处理。
(2)无界数据集
数据从开始生成就一直持续不断地产生新的数据,因此数据是没有边界的,例如服务器的日志,传感器信号等。
和批量数据处理方式对应,对无界数据集的处理方式被称为流式处理(Stream Process)。
可以看出,流式数据处理过程实现复杂度会更高,因为需要考虑处理过程中数据的顺序错乱,以及系统容错方面的问题。
(3)统一数据处理
有界数据集和无界数据集只是一个相对的概念,主要根据时间的范围而定,可以认为一段时间内的无界数据集其实就是有界数据集,同时有界数据也可以通过一些方法转换成无界数据集。
例如系统一年的订单交易系统,其本质上应该是有界的数据集,可是当我们把它一条一条按照产生的顺序发送到流式系统,通过流式系统对数据进行处理,在这种情况下可以认为数据是相对无界的。
对于无界数据也可以拆分成有界数据进行处理,例如将系统产生的数据接入到存储系统,按照年或月进行切割,切分成不同时间长度的有界数据集,然后就可以通过批处理方式对数据进行处理。
从以上,我们可以得出一个结论:有界数据和无界数据其实是可以相互转换的。
目前业界比较熟知的开源大数据处理框架中,能够同时支持流式计算和批量计算,比较典型的代表为 Apache Spark 和 Apacke Flink 两套框架。
Spark 是通过批处理模式来统一处理不同类型的数据集,对于流数据是将数据按照批次切分成微批(有界数据集)来进行处理。
Flink 用比较符合数据产生的规律方式处理流式数据,对于有界数据可以转换成无界数据统一处理,最终将批处理和流处理统一在一套流式引擎中。
说完了数据集类型之后,我们来看看 Flink 提供了哪些编程接口来处理数据。
Flink 根据数据集类型的不同将核心数据处理接口分为两大类,一类是 批计算接口 DataSet API,一类是支持流式计算的接口 DataStream API。
同时 Flink 将数据处理接口抽象成四层,由上而下分别为 SQL API,Table API,DataStream/DataSet API,以及 StateFul Stream Processing API
(1)Flink SQL
Flink 提供了统一的 SQL API 完成对批计算和流计算的处理,SQL语言具有比较低的学习成本,能够让数据分析人员和开发人员快速的上手
(2)Table API
Table API 将内存中的 DataStream 和 DataSet 数据集在原有的基础之上增加 Schema 信息,将数据类型统一抽象成表结构,然后通过 Table API 提供的接口处理对应的数据集。
SQL API 可以直接查询 Table API 中注册表中的数据表。
Table API 构建在 DataStream 和 DataSet 之上的同时,提供了大量面向领域语言的编程接口,例如 GroupByKey,Join 等操作符,提供给用户一种更加友好的处理数据集的方式。
同时 Table API 在转换为DataStream 和 DataSet 的数据处理过程中,也应用了大量的优化规则对处理逻辑进行了优化。
(3)DataStream API 和 DataSet API
DataStream API 处理流式数据,DataSet API 处理批量数据,用户 可以使用 map,filter,join,aggregation,window 等方法,同时每种接口都支持了 Java、Scala 及 Python 多种语言
(4)Stateful Stream Process API
这个 Api 是Flink 中处理 Stateful Stream 最底层的接口,用户可以通过这个 api 接口操作状态、时间等底层数据。
使用 Stateful Stream Process API 接口开发应用灵活性非常强,可以实现非常复杂的流式计算逻辑,但是相对用户使用成本也比较高,一般企业使用Flink 进行二次开发或深度封装的时候会用到这层接口。
Flink 编程接口的更多相关文章
- 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结
引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...
- NetBIOS与Winsock编程接口
最近在看网络编程方面的书,由于不是通信专业出身的,以前理解的网络体系感觉就是tcp/ip,最近工作上接触到了一些光环网等乱七八糟的东西,有些基本的LC.SC连接器都不认识.花时间看了下计算机网络体系结 ...
- 基于VC的ACM音频编程接口压缩Wave音频(一)
(一)概述 音频数据一般都具有较高的采样率,经过压缩的原始数据才具有实用价值,否则不仅要占用大量存储空间而且在播放或进行网络传输时效率也是非常低下的,所以音频数字压缩编码在多媒体应用中有着广泛而又重要 ...
- Java链式编程接口
在android开发中显示一个AlertDialog时,常采用下列的写法: new AlertDialog.Builder(getApplicationContext()) .setTitle(&qu ...
- (转载)Linux系统调用及用户编程接口(API)
(转载)http://www.farsight.com.cn/news/emb167.htm 1 Linux系统调用 所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组 ...
- USB联机线编程接口(API)
USB联机线编程接口(API) 2013-10-19 本页面的文字允许在知识共享 署名-相同方式共享 3.0协议和GNU自由文档许可证下修改和再使用. 关键字:USB隔离线.USB点对点通讯.USB通 ...
- 使用 COM 风格的编程接口
使用COM 风格的编程接口 假设不直接使用 COM 库.不创建自己的包装.那么更可能的是使用 COM 风格的编程接口.这是由于如今很多开发商公布应用程序时.提供了首选的互操作程序集(Primary I ...
- Windows数据库编程接口简介
数据库是计算机中一种专门管理数据资源的系统,目前几乎所有软件都需要与数据库打交道(包括操作系统,比如Windows上的注册表其实也是一种数据库),有些软件更是以数据库为核心因此掌握数据库系统的使用方法 ...
- Java8内置的函数式编程接口应用场景和方式
首先,我们先定义一个函数式编程接口 @FunctionalInterface public interface BooleanFunctionalInterface<T> { boolea ...
随机推荐
- .NET中的缓存
构建高性能的应用程序的非常重要一项就是使用缓存.使用缓存可以避免重新从读取服务器端读取数据,节省数据从客户端到服务器间往返的时间,同时也减轻了服务器数据存取的压力.如果客户端非常频繁地读取服务器上的数 ...
- var let及const
es6已经发布很久了,之前只会用var定义变量,学习了let和const后,又学到了一些作用域.JavaScript编译和深拷贝浅拷贝的知识.这章主要来说说这三个定义量的方法: 1.var 在没学习e ...
- K8S学习笔记之filebeat采集K8S微服务java堆栈多行日志
0x00 背景 K8S内运行Spring Cloud微服务,根据定制容器架构要求log文件不落地,log全部输出到std管道,由基于docker的filebeat去管道采集,然后发往Kafka或者ES ...
- mysql------explain工具
基于mysql5.7,innodb存储引擎 使用explain关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL ...
- from 表单用 GET 方法进行 URL 传值时后台无法获取问题
问题描述 <a href="${pageContext.request.contextPath}/client?method=add">点我</a> < ...
- python 16 模块
目录 模块 1. 自定义模块 1.1 模块分类 1.2 模块的导入 1.3 import 和 from 1.4 from 模块名 import * 1.5 模块的用法: 1.6 导入路径 2. tim ...
- Python+Selenium - Web自动化测试(二):元素定位
前言 前面已经把环境搭建好了,现在开始使用 Selenium 中的 Webdriver 框架编写自动化代码脚本,我们常见的在浏览器中的操作都会有相对应的类方法,这些方法需要定位才能操作元素,不同网页的 ...
- Codeforces 936B
题意略. 思路: 图论里掺杂了一些动态规划. 有几个注意点: 1.dp时状态的设计:因为我们要寻求的是出度为0并且可以从起点走奇数步抵达的点,由于同一个点可以通过多种方式到达. 并且我们在获得奇数步点 ...
- mac系统chrome浏览器快捷键
开发中谷歌浏览器常用快捷键: 开发者工具台快捷键:option+command+iconsole控制台快捷键:option+command+j 或者 option+command+c 1. 标签页和窗 ...
- 【管理学】PDCA