声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章
2. 由于是个人总结, 所以用最精简的话语来写文章
3. 若有错误不当之处, 请指出
侧输出流(SideOutput)
即分支流, 可以用来接收迟到数据, 也可以用来将数据分类成多个支流
对于滑动窗口, 有很多窗口重叠, 当迟到数据被所有窗口
都不接收时, 它才会进入侧输出流
只有Process这种最底层的API, 才能通过环境上下文
去使用侧输出流
案例: 将温度值低于30度的数据输出到 SideOutput
// 定义侧输出流标签, 注意得是其匿名实现类
final OutputTag<SensorReading> lowTempTag = new OutputTag<SensorReading>("lowTemp") { };
SingleOutputStreamOperator<SensorReading> highTempStream = dataStream.process(new ProcessFunction<SensorReading, SensorReading>( ) {
@Override
public void processElement(SensorReading value, Context ctx, Collector<SensorReading> out) {
if (value.getTemperature( ) < 30) {
ctx.output(lowTempTag, value);
} else {
out.collect(value);
}
}
});
DataStream<SensorReading> lowTempStream = highTempStream.getSideOutput(lowTempTag);
highTempStream.print("high");
lowTempStream.print("low");
8种ProcessAPI:
-
ProcessFunction
-
KeyedProcessFunction
得先keyBy,
会处理流的每一个元素, 以out.collect(xxx)的方式输出任意多个元素
-
CoProcessFunction
connect后的流再.process
有processElement1( ) 和 processElement2( )
-
ProcessJoinFunction
-
BroadcastProcessFunction
A流有1个分区, B流有4个分区, B流要用到A流的数据, 所以需要将A流1个分区的数据广播到B流的4个分区
广播后再进行process处理
-
KeyedBroadcastProcessFunction
-
ProcessWindowFunction
如 .aggregate(AggregateFunction<IN, ACC, OUT>aggFunction,ProcessWindowFunction<IN, OUT, KEY, W> windowFunction)
-
ProcessAllWindowFunction