前无言
随机分区(在 1 号线程和 2 号线程所在分区 随机输出),逻辑实现方法是:random.nextInt(下游算子并行度)
如果是数据源倾斜的场景,source 后,调用 rebalance就可以解决数据源的倾斜问题
rescale缩放:实现轮询,局部组队,比reblance更高效
发给下游所有的子任务,有几个并行子任务就发几个
全部发往第一个子任务
按照指定 key 去发送,相同 key 发往同一个子任务。
one-to-one:Forward 分区器
flatMap()的输出可以是零个、一个或多个元素。通过 Collector来输出, 调用几次就输出几条。该方法的返参是 void。当输出元素是一个列表时,flatMap()会将列表展平。
过滤,true 保留
RichMapFunction类是一种RichFunction类,它除了提供MapFunction类的基础功能,还提供了一系列其他方法,包括open()、close()、getRuntimeContext()和setRuntimeContext()等方法,重写这些方法可以创建状态数据、对数据进行广播、获取累加器和计数器等。
一进一出。
map()对一个DataStream中的每个元素使用用户自定义的Mapper函数进行处理,每个输入元素对应一个输出元素,最终整个数据流被转换成一个新的DataStream。
keyby是对数据分组,保证相同key的数据在同一个分区(子任务)
分区
: 一个子任务可以理解为一个分区,一个分区(子任务)中可以存在多个分组(key)max和maxby的区别: (min 同 max)
// 原始数据
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)
Reduce()的原理:reduce()在KeyedStream上生效,它接受两个输入,生成一个输出,即两两合一地进行汇总操作,生成一个同类型的新元素。
暂时没了。。