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);
// 将源标记为暂时空闲
@PublicEvolving
void markAsTemporarilyIdle();
// 返回检查点锁
// 通过 checkpoint 锁来保证状态更新和数据发送的原子性
Object getCheckpointLock();