Source 旧架构
在 Flink 1.12之前,开发一个新的 source connector 是通过实现 SourceFunction 接口来完成的。
@Public
public interface SourceFunction<T> extends Function, Serializable {
// 当 source 开始发送数据时,run 方法被调用,其参数 SourceContext 用于发送数据。run 方法是一个无限循环,通过一个标识 isRunning 来跳出循环结束 source。
void run(SourceContext<T> ctx) throws Exception;
// 放弃发送数据,一般实现逻辑是修改 isRunning 标识
void cancel();
// Source 上下文
interface SourceContext<T> {
// 从数据源中发送1条不含时间戳的数据
void collect(T element);
// 从数据源中发送1条含时间戳的数据
@PublicEvolving
void collectWithTimestamp(T element, long timestamp);
// 发送水印,以声明不再出现含水印之前时间戳的数据
@PublicEvolving
void emitWatermark(Watermark mark);
// 将源标记为暂时空闲
Flink的旧Source架构通过SourceFunction接口实现,存在批流处理逻辑不同、数据分片与读取混合等问题。FLIP-27引入新架构,分离数据分片与读取,实现流批统一。新架构包含SplitEnumerator负责数据分片,Reader负责读取,支持双向通信和通用线程模型,提高容错能力。新架构已在Flink 1.12及后续版本中逐步应用。
订阅专栏 解锁全文
1万+

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



