Flink基础-DataStream编程

Flink 基础 - DataStream 编程

流处理 API 衍变（对比 Storm）

Storm 的 API 抽象层次更低点，相当于是面向操作的，通过代码直接自己自定义构造 DAG

Copy
TopologyBuilder builder = new TopologyBuilder();

builder.setSpout("spout", new RandomSentenceSpout(), 5);
builder.setBolt("split", new SplitSentence(), 8).shuffleGrouping("spout");
builder.setBolt("count", new WordCount(), 12).fieldsGrouping("split", new Fields("word"));

Flink 相当于是面向数据的，通过 API, 也就是一系列算子对数据进行一系列转换计算，由 Flink 底层自己构建生成 DAG，所以相对来说抽象层次更高点

基本使用

Copy
//1、设置运行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//2、配置数据源读取数据
DataStream text = env.readTextFile ("input");
//3、进行一系列转换
DataStream<Tuple2<String, Integer>> counts = text.flatMap(new Tokenizer()).keyBy(0).sum(1);
//4、配置数据汇写出数据
counts.writeAsText("output");
//5、提交执行
env.execute("Streaming WordCount");

操作概览

DataStream 基本转换

物理分组方法

只有进行分组后才能调用reduce/sum等算子进行统计计算

类型 | 描述
keyBy() | 最常用的按 key 类型发送，key 的类型数量往往远大于算子并发实例数
global() | 全部发往第一个 task
broadcast() | 广播，适用于数据量小的情况
forward() | 上下游并发度一致时一对一发送
shuffle() | 随机均匀分配
rebalance() | Round-Robin (轮流分配)
rescale() | Local Round-Robin (本地轮流分配)
partitionCustomer() | 自定义单播 ()