我正在尝试使用自定义值转换器设置 kafka-connector 。
我正在使用kafka传输序列化的节俭对象。
我想设置一个kafka连接器,该连接器将节俭消息反序列化,将它们转换为json并发送给elasticsearch。
方法org.apache.kafka.connect.storage.Converter#toConnectData
返回SchemaAndValue
,需要org.apache.kafka.connect.data.Schema
。
如何为我的json获取此架构?
到目前为止我尝试过的事情:
我尝试扩展org.apache.kafka.connect.json.JsonConverter
,但是它有自己的模式,来自某个地方。
我尝试使用以下库生成模式:https://github.com/reinert/JJSchema,但是JsonConverter
似乎具有自己的格式:它期望map
而不是object
等。
参见:https://github.com/apache/kafka/blob/trunk/connect/json/src/main/java/org/apache/kafka/connect/json/JsonConverter.java#L408
尽管我在配置中禁用了架构("value.converter.schemas.enable":"false"
),但连接器仍然崩溃并抱怨架构。 此架构来自何处?他们是如何产生的?
我要编写一个方法来递归重命名json模式中的所有“错误”内容,但这太尴尬了。 有适当的方法吗?
UPD:我的配置是
{
"connector.class": "io.confluent.connect.elasticsearch.ElasticsearchSinkConnector",
"tasks.max": "1",
"topics": "mytopic",
"key.ignore": "true",
"connection.url": "https://my-elastic:443",
"type.name": "event",
"elasticsearch.index.prefix" : "kafka",
"key.converter": "org.apache.kafka.connect.storage.StringConverter",
"value.converter" : "com.example.ThriftToJsonDeserializer",
"value.converter.schemas.enable":"false"
}
答案 0 :(得分:1)
问题在于,Elasticsearch Connector尝试基于消息架构为Elasticsearch推断映射。消息架构由Converter
创建,并由Transforms
修改。
如果您在value.converter.schemas.enable
上设置false
,则记录架构为空。
您必须将schema.ignore
设置为true,Elasticsearch Connector不会推断架构。