Kafka Connect,获取JsonConverter的Json架构

时间:2019-02-05 18:47:01

标签: json elasticsearch apache-kafka thrift apache-kafka-connect

我正在尝试使用自定义值转换器设置 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"
}

1 个答案:

答案 0 :(得分:1)

问题在于,Elasticsearch Connector尝试基于消息架构为Elasticsearch推断映射。消息架构由Converter创建,并由Transforms修改。 如果您在value.converter.schemas.enable上设置false,则记录架构为空。

您必须将schema.ignore设置为true,Elasticsearch Connector不会推断架构。