Yige

Yige

Build

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");

操作概览#

image.png

DataStream 基本转换#

image.png

物理分组方法#

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

类型描述
keyBy()最常用的按 key 类型发送,key 的类型数量往往远大于算子并发实例数
global()全部发往第一个 task
broadcast()广播,适用于数据量小的情况
forward()上下游并发度一致时一对一发送
shuffle()随机均匀分配
rebalance()Round-Robin (轮流分配)
rescale()Local Round-Robin (本地轮流分配)
partitionCustomer()自定义单播 ()
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。