Flink常用Api详解

DataStream API主要分为3块:DataSource、Transformation、Sink。

Flink数据源(DataSource)可以有两种实现方式:
1.内置数据源
a)基于文件
readTextFile(path)//获取文本内容
读取文本文件,文件遵循TextInputFormat逐行读取规则并返回。
b)基于Socket
//获取Flink的运行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
String hostname = “k8s-master01”;
String delimiter = “\n”;
env.socketTextStream(hostname,port,delimiter);//从socket中读取数据,元素可以通过一个分隔符分开
c)基于Collection
fromCollection(Collection);//通过java的Collection集合创建一个数据流,集合中的所有元素必须是相同类型的

2.自定义数据源
a)实现SourceFunction(非并行的)
b)实现ParallelSourceFunction
c)继承RichParallelSourceFunction
Transformation
Transformation(Operators/操作符/算子):可以将一个或多个DataStream转换为新的DataStream。

Flink针对DataStream Api提供了打量的已经实现的算子
Map:输入一个元素,然后返回一个元素,中间可以进行清洗转换等操作
FlatMap:输入一个元素,可以返回0个,1个或者多个元素
Fliter:过滤函数,对传入的数据进行判断,符合条件的数据会被留下
KeyBy: 根据指定的Key进行分组,Key相同的数据会进入同一个分区。
KeyBy的两种典型用法如下。
DataStream.keyBy(“someKey”)指定对象中的someKey段作为分组Key。
DataStream.keyBy(0)指定Tuple中的第一个元素作为分组key
Reduce: 对数据进行聚合操作,结合当前元素和上一次Reduce返回的值进行聚合操作,然后返回一个新的值。
Aggregations: sum()、min()、max()等。
//sum()和reduce功能相同吧
Union: 合并多个流,新的流会包含所有流中的数据,但是Union有一个限制,就是所有合并的流类型必须是一致的
Connect:和Union类似:在ConnectedStream中需要使用这种函数,类似于Map和flatMap。
coMap和coFlatMap:在ConnectedStream中需要使用这种函数,类似于Map和flatMap。
Split:根据规则把一个数据流切分为多个流。
Select:和Split配合使用,选择切分后的流
另外,Flink针对DataStream提供了一些数据分区规则,具体如下。
Random partitioning:随机分区。
DataStream.shuffle()
Rebalancing:对数据集进行再平衡、重分区和消除数据倾斜。
Rescaling:重新调节
DataStream.rescale()
如果上游操作有2个并发,而下游操作有4个并发,那么上游的1个并发结果分配给力下游的2个并发操作,
另外的1个并发结果则分配给了下游的另外2个并发操作。
另一方面,下游有2个并发操作而上游有4个并发操作,那么上游的其中2个操作的结果分配给了下游的
一个并发操作,而另外2个并发操作的结果则分配给了另外1个并发操作
Rescaling与Rebalancing的区别为 Rebalancing会产生全重分区,而Rescaling不会。

转载自
Flink入门与实战

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值