文章目录
- 前言
- 一、Partition分区(物理分区)
- 1.1 随机分区 shuffle
- 1.2 轮询分区 rebalance
- 1.3 重缩放分区 rescale
- 1.4 广播分区 broadcast
- 1.5 全局分区 global
- 1.6 keyby
- 1.7 自定义分区 Custom
- 二、transform
- 2.1 flatMap
- 2.2 filter
- 2.3 RichFunction
- 2.4 map
- 三、 Aggregate聚合
- 3.1 keyBy()
- 3.2 max()和 maxBy()
- 3.3 Reduce
- 总结
前言
前无言
一、Partition分区(物理分区)
1.1 随机分区 shuffle
随机分区(在 1 号线程和 2 号线程所在分区 随机输出),逻辑实现方法是:random.nextInt(下游算子并行度)
1.2 轮询分区 rebalance
如果是数据源倾斜的场景,source 后,调用 rebalance就可以解决数据源的倾斜问题
1.3 重缩放分区 rescale
rescale缩放:实现轮询,局部组队,比reblance更高效
1.4 广播分区 broadcast
发给下游所有的子任务,有几个并行子任务就发几个
1.5 全局分区 global
全部发往第一个子任务
1.6 keyby
按照指定 key 去发送,相同 key 发往同一个子任务。
one-to-one:Forward 分区器
1.7 自定义分区 Custom
二、transform
2.1 flatMap
flatMap()的输出可以是零个、一个或多个元素。通过 Collector来输出, 调用几次就输出几条。该方法的返参是 void。当输出元素是一个列表时,flatMap()会将列表展平。
2.2 filter
过滤,true 保留
2.3 RichFunction
RichMapFunction类是一种RichFunction类,它除了提供MapFunction类的基础功能,还提供了一系列其他方法,包括open()、close()、getRuntimeContext()和setRuntimeContext()等方法,重写这些方法可以创建状态数据、对数据进行广播、获取累加器和计数器等。
- Rich 类函数多了声明周期管理方法
- open():每个子任务,在启动前,调用一次
- close():每个子任务,在结束时,调用一次
- 如果是 flink 程序异常挂掉,不会调用 close
- 如果是正常调用 cancel 命令,可以 close
- 多一个运行时上下文
可以获取一些运行时的环境行信息,比如子任务编号、名称,等其他。
2.4 map
一进一出。
map()对一个DataStream中的每个元素使用用户自定义的Mapper函数进行处理,每个输入元素对应一个输出元素,最终整个数据流被转换成一个新的DataStream。
三、 Aggregate聚合
3.1 keyBy()
- 返回的是 一个 KeyedStream,键控流
- keyby不是 转换算子, 只是对数据进行重分区, 不能设置并行度
- 分组 与 分区 的关系:
keyby是对数据分组,保证相同key的数据在同一个分区(子任务)
分区
: 一个子任务可以理解为一个分区,一个分区(子任务)中可以存在多个分组(key)
3.2 max()和 maxBy()
max和maxby的区别: (min 同 max)
- max:只会取比较字段的最大值,非比较字段保留第一次的值
- maxby:取比较字段的最大值,同时非比较字段,取最大值这条数据的值
// 原始数据
new WaterSensor("s1", 1L, 1),
new WaterSensor("s1", 11L, 11),
new WaterSensor("s2", 2L, 2),
new WaterSensor("s3", 3L, 3)// max // 比较字段是 vc、按照 id 分组
WaterSensor(id=s1, ts=1, vc=1)
WaterSensor(id=s1, ts=1, vc=11) // ts 总会保留第一次的值 1
WaterSensor(id=s2, ts=2, vc=2)
WaterSensor(id=s3, ts=3, vc=3)// maxby // 比较字段是 vc、按照 id 分组
WaterSensor(id=s1, ts=1, vc=1)
WaterSensor(id=s1, ts=11, vc=11) // ts 取了 vc 对应这行的最大值 11
WaterSensor(id=s2, ts=2, vc=2)
WaterSensor(id=s3, ts=3, vc=3)
3.3 Reduce
Reduce()的原理:reduce()在KeyedStream上生效,它接受两个输入,生成一个输出,即两两合一地进行汇总操作,生成一个同类型的新元素。
总结
暂时没了。。