【Flink网络数据传输(3)】RecordWriter的能力:实现数据分发策略或广播到下游InputChannel

本文详细解析了Flink中RecordWriter的创建过程,包括根据recordWrites数量创建不同代理类,主要组件如RecordSerializer和ResultPartitionWriter的作用,以及ChannelSelectorRecordWriter和BroadcastRecordWriter的发送策略。重点介绍了数据分发策略和广播模式的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值