欢迎来 kk大数据,今天分享的是 Flink 提供了哪些编程接口可以给我们开发。

一、数据集类型

现实世界中,所有的数据都是以流式的形态产生的,不管是哪里产生的数据,在产生的过程中都是一条条地生成,最后经过了存储和转换处理,形成了各种类型的数据集。

根据现实世界中,数据产生方式和数据产生是否含有边界(具有起始点和终止点)角度,将数据分为两种类型的数据集,一种是有界数据集,另外一种是无界数据集。

(1)有界数据集

有界数据具有时间边界,在处理过程中数据一定会在某个时间范围内起始和结束,有可能是一分钟,也有可能是一天内的交易数据。

对有界数据集的数据处理方式被称为批计算,例如将数据从 RDBMS 或文件系统中读取出来,然后在分布式系统内处理,最后再将处理结果写入存储介质中,整个过程就被称为批处理。

(2)无界数据集

数据从开始生成就一直持续不断地产生新的数据,因此数据是没有边界的,例如服务器的日志,传感器信号等。

和批量数据处理方式对应,对无界数据集的处理方式被称为流式处理(Stream Process)。

可以看出,流式数据处理过程实现复杂度会更高,因为需要考虑处理过程中数据的顺序错乱,以及系统容错方面的问题。

(3)统一数据处理

有界数据集和无界数据集只是一个相对的概念,主要根据时间的范围而定,可以认为一段时间内的无界数据集其实就是有界数据集,同时有界数据也可以通过一些方法转换成无界数据集。

例如系统一年的订单交易系统,其本质上应该是有界的数据集,可是当我们把它一条一条按照产生的顺序发送到流式系统,通过流式系统对数据进行处理,在这种情况下可以认为数据是相对无界的。

对于无界数据也可以拆分成有界数据进行处理,例如将系统产生的数据接入到存储系统,按照年或月进行切割,切分成不同时间长度的有界数据集,然后就可以通过批处理方式对数据进行处理。

从以上,我们可以得出一个结论:有界数据和无界数据其实是可以相互转换的。

目前业界比较熟知的开源大数据处理框架中,能够同时支持流式计算和批量计算,比较典型的代表为 Apache Spark 和 Apacke Flink 两套框架。

Spark 是通过批处理模式来统一处理不同类型的数据集,对于流数据是将数据按照批次切分成微批(有界数据集)来进行处理。

Flink 用比较符合数据产生的规律方式处理流式数据,对于有界数据可以转换成无界数据统一处理,最终将批处理和流处理统一在一套流式引擎中。

说完了数据集类型之后,我们来看看 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 编程接口的更多相关文章

  1. 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结

    引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...

  2. NetBIOS与Winsock编程接口

    最近在看网络编程方面的书,由于不是通信专业出身的,以前理解的网络体系感觉就是tcp/ip,最近工作上接触到了一些光环网等乱七八糟的东西,有些基本的LC.SC连接器都不认识.花时间看了下计算机网络体系结 ...

  3. 基于VC的ACM音频编程接口压缩Wave音频(一)

    (一)概述 音频数据一般都具有较高的采样率,经过压缩的原始数据才具有实用价值,否则不仅要占用大量存储空间而且在播放或进行网络传输时效率也是非常低下的,所以音频数字压缩编码在多媒体应用中有着广泛而又重要 ...

  4. Java链式编程接口

    在android开发中显示一个AlertDialog时,常采用下列的写法: new AlertDialog.Builder(getApplicationContext()) .setTitle(&qu ...

  5. (转载)Linux系统调用及用户编程接口(API)

    (转载)http://www.farsight.com.cn/news/emb167.htm 1 Linux系统调用 所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组 ...

  6. USB联机线编程接口(API)

    USB联机线编程接口(API) 2013-10-19 本页面的文字允许在知识共享 署名-相同方式共享 3.0协议和GNU自由文档许可证下修改和再使用. 关键字:USB隔离线.USB点对点通讯.USB通 ...

  7. 使用 COM 风格的编程接口

    使用COM 风格的编程接口 假设不直接使用 COM 库.不创建自己的包装.那么更可能的是使用 COM 风格的编程接口.这是由于如今很多开发商公布应用程序时.提供了首选的互操作程序集(Primary I ...

  8. Windows数据库编程接口简介

    数据库是计算机中一种专门管理数据资源的系统,目前几乎所有软件都需要与数据库打交道(包括操作系统,比如Windows上的注册表其实也是一种数据库),有些软件更是以数据库为核心因此掌握数据库系统的使用方法 ...

  9. Java8内置的函数式编程接口应用场景和方式

    首先,我们先定义一个函数式编程接口 @FunctionalInterface public interface BooleanFunctionalInterface<T> { boolea ...

随机推荐

  1. Go---go-cache包学习

    github.com/patrickmn/go-cachego-cache是一款类似于memached 的key/value 缓存软件.它比较适用于单机执行的应用程序.go-cache实质上就是拥有过 ...

  2. MySQL--单表查询、多表查询简单概述

    表的前期准备: create table emp( id int not null unique auto_increment, name ) not null, sex enum('male','f ...

  3. C#中appium自动化执行移动命令mobile:shell用法

    官网:https://appium.readthedocs.io/en/latest/en/commands/mobile-command/#android 1.执行ADB shell命令(需要设置服 ...

  4. 【畅通工程 HDU - 1232 】【并查集模板】

    并查集讲解和模板 有一个博文对此分析的很透彻,附链接 为避免原链接失效,现摘录如下: 为了解释并查集的原理,我将举一个更有爱的例子. 话说江湖上散落着各式各样的大侠,有上千个之多.他们没有什么正当职业 ...

  5. 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级

    标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnb ...

  6. Kafka的消息会丢失和重复吗?——如何实现Kafka精确传递一次语义

    我们都知道Kafka的吞吐量很大,但是Kafka究竟会不会丢失消息呢?又会不会重复消费消息呢? 图 无人机实时监控 ​ 有很多公司因为业务要求必须保证消息不丢失.不重复的到达,比如无人机实时监控系统, ...

  7. JS中的分支结构

    if语句 语法: if (expression1) { } else if (expression2) { } else { } 执行机制: 先对expression1做判定,如果为真,执行对应的代码 ...

  8. Redis学习总结(四)--Redis主从配置

    在分布式系统架构设计中高可用是必须考虑的因素之一.高可用通常是指,通过设计减少系统不能提供服务的时间.而单点是系统高可用的最大的败笔,如果单点出现问题的话,那么整个服务就不能使用了,所以应该尽量在系统 ...

  9. ‎CocosBuilder 学习笔记(1) CCBReader 解析.ccbi文件流程

    1. 简介 CocosBuilder是免费开源的Cocos2d UI编辑器. .ccb文件是CCB项目的原始文件. .ccbi文件是CCB项目发布后的生成的二进制文件.CCBReader可以快速通过该 ...

  10. Java连载23-for循环练习、while\dowhile详解

    一.for循环练习 1.例子:输入九九乘法表 public class d23_{ public static void main(String[] args) { for(int i = 1;i&l ...