自从学会自定义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)

本文深入探讨Flink中自定义source和sink的工作原理。以RichParallelSourceFunction为例,详细阐述了从AbstractUdfStreamOperator的open和close方法到StreamSource的run和cancel方法的调用过程,揭示了自定义source和sink如何与Flink系统无缝整合并生成或消费数据。
最低0.47元/天 解锁文章
1390

被折叠的 条评论
为什么被折叠?



