背景
最近工作中需要自定义开发一些flink sql的connector,因为官方提供的connector毕竟有限,在我们工作中可能会用到各种各样的中间件。所以官方没有提供的就需要我们自定义开发。
就是如:
CREATE TABLE XXX(
A STRING,
B BIGINT)
WITH(
'connect.type' = 'kafka',
...
)
所以开发一个自己的connector需要做哪些,本文就来总结一下开发的主要步骤,以及我遇到的问题怎么解决的。
开发
自定义Factory,根据需要实现StreamTableSourceFactory和StreamTableSinkFactory
根据需要继承ConnectorDescriptorValidator,定义自己的connector参数(with 后面跟的那些)
Factory中的requiredContext、supportedProperties都比较重要,框架中对Factory的过滤和检查需要他们
需要自定义个TableSink,根据你需要连接的中间件选择是AppendStreamTableSink、Upsert、Retract
重写consumeDataStream方法
自定义一个SinkFunction,在invoke方法中实现将数据写入到外部中间件。
以上5步基本上可以写一个简单的sql-connector了
问题
异常信息:
org.apache.flink.table.api.NoMatchingTableFactoryException: Could not find a suitable table factory for 'org.apache.flink.table.factories.TableSinkFactory' in
the classpath.
Reason: Required context properties mismatch.
The following properties are requested:
connector.address=localhost:9091
connector.job=testJob
connector.metrics=testMetrics
connector.type=xxxx