Flink 原理、实战与性能优化 (21):Flink 编程模型 3.2

阅读数:9 2019 年 12 月 11 日 20:42

Flink原理、实战与性能优化(21):Flink编程模型 3.2

(Flink 编程接口)

内容简介
这是一部以实战为导向,能指导读者零基础掌握 Flink 并快速完成进阶的著作,从功能、原理、实战和调优等 4 个维度循序渐进地讲解了如何利用 Flink 进行分布式流式应用开发。作者是该领域的资深专家,现就职于第四范式,曾就职于明略数据。
全书一共 10 章,逻辑上可以分为三个部分:
第一部分(第 1~2 章)
主要介绍了 Flink 的核心概念、特性、应用场景、基本架构,开发环境的搭建和配置,以及源代码的编译。
第二部分(第 3~9 章)
详细讲解了 Flink 的编程范式,各种编程接口的功能、应用场景和使用方法,以及核心模块和组件的原理和使用。
第三部分(第 10 章)
重点讲解了 Flink 的监控和优化,参数调优,以及对反压、Checkpoint 和内存的优化。

如图 3-2 所示,Flink 根据数据集类型的不同将核心数据处理接口分为两大类,一类是支持批计算的接口 DataSet API,另外一类是支持流计算的接口 DataStream API。同时 Flink 将数据处理接口抽象成四层,由上向下分别为 SQL API、Table API、DataStream /DataSet API 以及 Stateful Stream Processing API,用户可以根据需要选择任意一层抽象接口来开发 Flink 应用。

(1)Flink SQL

从图 3-2 中可以看出,Flink 提供了统一的 SQL API 完成对批计算和流计算的处理,目前 SQL API 也是社区重点发展的接口层,对 SQL API 也正在逐步完善中,其主要因为 SQL 语言具有比较低的学习成本,能够让数据分析人员和开发人员更快速地上手,帮助其更加专注于业务本身而不是受限于复杂的编程接口。

Flink原理、实战与性能优化(21):Flink编程模型 3.2

图 3-2 Flink 接口分层与抽象

(2)Table API

Table API 将内存中的 DataStream 和 DataSet 数据集在原有的基础之上增加 Schema 信息,将数据类型统一抽象成表结构,然后通过 Table API 提供的接口处理对应的数据集。SQL API 则可以直接查询 Table API 中注册表中的数据表。Table API 构建在 DataStream 和 DataSet 之上的同时,提供了大量面向领域语言的编程接口,例如 GroupByKey、Join 等操作符,提供给用户一种更加友好的处理数据集的方式。除此之外,Table API 在转换为 DataStream 和 DataSet 的数据处理过程中,也应用了大量的优化规则对处理逻辑进行了优化。同时 Table API 中的 Table 可以和 DataStream 及 DataSet 之间进行相互转换。

(3)DataStream API 和 DataSet API

DataStream API 和 DataSet API 主要面向具有开发经验的用户,用户可以使用 DataStream API 处理无界流数据,使用 DataSet API 处理批量数据。DataStream API 和 DataSet API 接口同时提供了各种数据处理接口,例如 map,filter、oins、aggregations、window 等方法,同时每种接口都支持了 Java、Scala 及 Python 等多种开发语言的 SDK。

(4)Stateful Stream Process API

Stateful Stream Process API 是 Flink 中处理 Stateful Stream 最底层的接口,用户可以使用 Stateful Stream Process 接口操作状态、时间等底层数据。使用 Stream Process API 接口开发应用的灵活性非常强,可以实现非常复杂的流式计算逻辑,但是相对用户使用成本也比较高,一般企业在使用 Flink 进行二次开发或深度封装的时候会用到这层接口。

Flink原理、实战与性能优化(21):Flink编程模型 3.2

购书地址 https://item.jd.com/12518733.html?dist=jd

评论

发布