我们在第2章介绍Flink快速上手时,曾编写过一个简单的词频统计(WordCount)程序,相信读者已经对Flink的编程方式有了基本的认识。接下来,我们将开始大量的代码练习,详细了解用于Flink程序开发的API用法。
Flink具有非常灵活的分层API设计,其中的核心层就是DataStream/DataSet API。由于新版本已经实现了流批一体,DataSet API将被弃用,官方推荐统一使用DataStream API处理流数据和批数据。由于内容较多,我们将用几章的篇幅来做详细讲解,本章主要介绍基本的DataStream API用法。
DataStream(数据流)是Flink中一个用来表示数据集合的类,我们编写的Flink代码其实就是基于这种数据类型的处理,所以这套核心API就以DataStream命名。对于批处理和流处理,我们都可以用同一套API来实现。
DataStream在用法上有些类似于常规的Java集合,但又有所不同。我们在代码中往往并不关心集合中具体的数据,而只是用API定义出一连串的操作来处理它们,这就叫作数据流的“转换”(Transformation)。
一个Flink程序,其实就是对DataStream的各种转换。具体来说,Flink程序基本上都由以下几部分构成。
· 获取执行环境。
· 读取数据源。
· 定义基于数据的转换操作。
· 定义计算结果的输出位置。
· 触发程序执行。
其中,获取环境和触发执行,都可以认为是针对执行环境的操作。所以本章我们就从执行环境、数据源、转换操作、输出四大部分,对常用的DataStream API做基本介绍,如图5-1所示。
图5-1 Flink程序构成部分