SpecificAvroDeserializer и "specc.avro.reader" - PullRequest
0 голосов
/ 26 октября 2018

У меня есть вопрос о SpecificAvroDeserializer, поскольку из-за имени класса я всегда предполагал, что SpecificAvroSerializer будет выдавать SpecificRecord, а SpecificAvroDeserializer сможет его использовать.

К моему удивлению, если я не установлю 'specificСвойство .avro.reader, SpecificAvroDeserializer пытается прочитать байтовый массив как GenericRecord из-за следующей строки кода в классе «AbstractKafkaAvroDeserializer» (https://github.com/confluentinc/schema-registry/blob/master/avro-serializer/src/main/java/io/confluent/kafka/serializers/AbstractKafkaAvroDeserializer.java)..

private DatumReader getDatumReader(Schema writerSchema, Schema readerSchema) {
boolean writerSchemaIsPrimitive =
    AvroSchemaUtils.getPrimitiveSchemas().values().contains(writerSchema);
// do not use SpecificDatumReader if writerSchema is a primitive
if (useSpecificAvroReader && !writerSchemaIsPrimitive) {
  if (readerSchema == null) {
    readerSchema = getReaderSchema(writerSchema);
  }
  return new SpecificDatumReader(writerSchema, readerSchema);
} else {
  if (readerSchema == null) {
    return new GenericDatumReader(writerSchema);
  }
  return new GenericDatumReader(writerSchema, readerSchema);
}

}

Я думалконструктор SpecificAvroDeserializer должен установить это, но это не так .. (https://github.com/confluentinc/schema-registry/blob/master/avro-serde/src/main/java/io/confluent/kafka/streams/serdes/avro/SpecificAvroDeserializer.java)

Так чего мне здесь не хватает?

...