Flink 基礎 - DataStream 編程#
流處理 API 演變(對比 Storm)#
- Storm 的 API 抽象層次更低點,相當於是
面向操作的
,通過代碼直接自己自定義構造 DAG
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,所以相對來說抽象層次更高點
基本使用#
//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() | 自定義單播 () |