Flink 源码分析之 Flink 自定义 source、sink 是如何起作用的

本文深入探讨Flink中自定义source和sink的工作原理。以RichParallelSourceFunction为例,详细阐述了从AbstractUdfStreamOperator的open和close方法到StreamSource的run和cancel方法的调用过程,揭示了自定义source和sink如何与Flink系统无缝整合并生成或消费数据。
摘要由CSDN通过智能技术生成

自从学会自定义source之后,一直都比较好奇,为什么我实现一个 *SourceFunction,我自己定义的代码就可以跟 Flink很好的整合在一起?

下面以 RichParallelSourceFunction 为例,来具体看一下究竟是自定义 source 是如何执行的



首先看一下 Flink中的抽象类 AbstractUdfStreamOperator,专门负责Rich*Function的 open 和close方法

 

......

// flink 提供的 Rich*Function 系列算子的 open 和 close 方法被执行的地方

@Override

public void open() throws Exception {

super.open();

//关键性方法 负责执行我们重写的open方法

FunctionUtils.openFunction(userFunction, new Configuration());

}

//关键性方法 负责执行我们重写的close方法

@Override

public void close() throws Exception {

super.close();

functionsClosed = true;

FunctionUtils.closeFunction(userFunction);

}

......

再继续看一下StreamSource

 

......

//生成上下文之后,接下来就是把上下文交给 SourceFunction 去执行,调用用户重写的run方法开始正式运行

userFunction.run(ctx)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值