文章目录
StreamTask节点中的中间结果数据
元素最终通过RecordWriterOutput实现了网络输出,RecordWriterOutput底层依赖RecordWriter
组件完成数据输出操作,接下来我们深入了解RecordWriter的设计和实现。
一.创建RecordWriter实例都做了啥
在StreamTask构造器方法
中会直接创建RecordWriter实例,用于输出当前任务产生的Intermediate Result数据
。
1. 根据recordWrites数量创建不同的代理类
其中createRecordWriterDelegate根据recordWrites的数量创建对应的RecordWriterDelegate代理类。
protected StreamTask(
Environment environment,
@Nullable TimerService timerService,
Thread.UncaughtExceptionHandler uncaughtExceptionHandler,
StreamTaskActionExecutor actionExecutor,
TaskMailbox mailbox)
throws Exception {
...
this.recordWriter = createRecordWriterDelegate(configuration, environment);
...
}
//1. 如果recordWrites数量等于1,则创建SingleRecordWriter代理类;
//2. 如果recordWrites数量等于0,则创建NonRecordWriter代理类;
//3. 其他情况则创建MultipleRecordWriters代理类。
@VisibleForTesting
public static <OUT>
RecordWriterDelegate<SerializationDelegate<StreamRecord<OUT>>>
createRecordWriterDelegate(
StreamConfig configuration, Environment environment) {
List<RecordWriter<SerializationDelegate<StreamRecord<OUT>>>> recordWrites =
createRecordWriters(configuration, environment);
if (recordWrites.size() == 1) {
return new SingleRecordWriter<>(recordWrites.get(0));
} else if (recordWrites