03-flink编程模型
Flink编程接口
根据数据类型分为两大类:
- 支持批计算的接口DataSet API
- 支持流计算的接口DataStream API
同时flink将数据处理接口抽象成四层,由上往下分别为
-
SQL API
主要是学习成本低,能够快速上手
-
Table API
将内存中的DataStream和DateSet数据集在原有的基础上增加Schema信息,将数据类型统一抽象成表结构,然后通过Table API提供的接口处理对应的数据集
-
DataStream/DataSet API
面向开发用户,处理无界数据流和批量数据
-
Stateful Stream Processing API
stateful Stream最底层接口,用户可以使用Stateful Stream Process接口操作状态、时间等底层数据
用户可以根据需求选择任意一层抽象接口来开发Flink引用
编程模型
- 设置执行环境
- 创建数据源(可以多个数据源)
- 对数据进行不同方式的转换(算子)
- 指定数据去向(对结果的数据进行sink,可以输出到多个地方)
//1.设定执行环境
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.getConfig().setGlobalJobParameters(params);
//2.创建数据源
DataStream<String> text = env.readTextFile("file://path/file");
//3.对数据进行不同方式的转换
DataStream<Tuple2<String, Integer>> counts = text.flatMap(new Tokenizer()).keyBy(0).sum(1);
//4.指定数据去向(例子中,打印到控制台也是一种数据去向)
counts.print();
//5.指定名称并触发流式任务(批处理不需要该步骤)
env.execute("Streaming WordCount");
流分类
-
one-to-one streams
保持元素的分区和顺序
-
redistributing streams
改变流的分区
重新分区策略取决于使用的算子
如:keyBy()、broadcast()、rebalance