Flink 侧输出流

简介

在 DataStream API 中除了通常操作产生的主流之外,还可以生成任意数量的侧输出流,且主流于侧输出流的数据类型可以不同。可以生成侧输出流的函数如下:

  • ProcessFunction
  • KeyedProcessFunction
  • CoProcessFunction
  • KeyedCoProcessFunction
  • ProcessWindowFunction
  • ProcessAllWindowFunction

使用示例

向侧输出流中输入内容的示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DataStream<Integer> input = ...;

final OutputTag<String> outputTag = new OutputTag<String>("side-output"){};

SingleOutputStreamOperator<Integer> mainDataStream = input
.process(new ProcessFunction<Integer, Integer>() {

@Override
public void processElement(
Integer value,
Context ctx,
Collector<Integer> out) throws Exception {
// emit data to regular output
out.collect(value);

// emit data to side output
ctx.output(outputTag, "sideout-" + String.valueOf(value));
}
});

还可以通过如下方式处理侧输出流:

1
2
3
4
5
final OutputTag<String> outputTag = new OutputTag<String>("side-output"){};

SingleOutputStreamOperator<Integer> mainDataStream = ...;

DataStream<String> sideOutputStream = mainDataStream.getSideOutput(outputTag);

参考资料

官方文档


Flink 侧输出流
https://wangqian0306.github.io/2022/flink_side_output/
作者
WangQian
发布于
2022年3月2日
许可协议