自定义table source&sink
概览
在大多数情况下,开发者不需要从头开始创建新的connector,而是想要略微修改现有的connector或hook。 在少数情况下,开发者想创建专门的连接器。
本节针对两种用例都提供帮助。 它说明了表connector的一般体系结构,从API中的声明到将在集群上执行的运行时代码。
从SQL到可运行的代码转换分为三个阶段
- metadata
此阶段DDL sql语句会被转换成CatalogTable - planning
在planning阶段,DynamicTableSourceFactory和DynamicTableSinkFactory两个工厂类会根据CatalogTable解析出DynamicTableSource和DynamicTableSink。
默认情况下,使用Java的服务提供者接口(SPI)发现DynamicTableSourceFactory和DynamicTableSinkFactory的实例。连接器选项(例如示例中的’connector’=‘kafka’)必须对应于有效的工厂标识符。 - runtime
逻辑计划完成后,planner将从表连接器获取运行时实现。 运行时逻辑是在Flink的核心连接器接口(例如InputFormat或SourceFunction)中实现的。
这些接口通过另一个抽象级别分组为ScanRuntimeProvider,LookupRuntimeProvider和SinkRuntimeProvider的子类。
例如,OutputFormatProvider(提供org.apache.flink.api.common.io.OutputFormat)和SinkFunctionProvider(提供org.apache.