我正在尝试将数据直接从KSQL下沉到InfluxDB(或任何其他需要定义的连接器)中。我可以在简单的情况下使事情正常工作,但是当架构需要复杂的类型时,我开始遇到麻烦。 (即InfuxDB的标签)。
这是我的视频流/模式的示例:
Field | Type
-------------------------------------------------------------------
ROWKEY | VARCHAR(STRING) (primary key)
FIELD_1 | VARCHAR(STRING)
FIELD_2 | VARCHAR(STRING)
FIELD_3 | VARCHAR(STRING)
FIELD_4 | DOUBLE
TAGS | MAP<STRING, VARCHAR(STRING)>
如果我手动创建一个AVRO模式并填充来自简单生产者的记录,则可以阅读入门指南here并为InfluxDB嵌入标签。
但是,当我转用KSQL时,如果尝试将AVRO流直接 下沉到InfluxDB中,则会丢失有关复杂类型(标签)的信息。我注意到来自此blog post的警告,“警告ksqlDB / KSQL尚无法以与此连接器兼容的Avro格式写入数据”
接下来,我尝试将AVRO流转换为JSON格式,但是现在我知道我必须在每个记录中指定架构,类似于此question所呈现的内容。我无法将AVRO流转换为JSON流并同时嵌入模式和有效负载。
最后,我看到带有"jiggling solution"的kafkacat,但这会迫使我将记录从KSQL转储到kafkacat,然后再返回到Kafka,直到最终到达Influx。
是否有一种方法可以将复杂记录从KSQL直接以JSON或AVRO格式直接下沉到连接器中?
答案 0 :(得分:1)
我想ksqlDB不能以InfluxDB要求的格式输出AVRO数据的原因是因为由于Avro映射要求,它不会将TAGS
字段输出为Avro map
类型非空键,SQL MAP<STRING, STRING>
类型允许空键。因此,ksqlDB将地图序列化为键值条目的Avro array
。
要使用Avro进行操作,您需要:
请随时对这些问题进行投票/发表评论,以提高他们的知名度。
以前,基于JSON的解决方案行不通,因为您已经指出,连接器需要将JSON模式嵌入到有效负载中。但是,最新版本的Confluent Platform / Schema Registry支持Schema Registry中的JSON模式。因此,尽管我还没有尝试过,但是升级到最新的CP版本可能意味着基于JSON的解决方案将会起作用。如果没有,则可能是通过提高Jira / Github票证来使相应组件升级以使其正常工作。