У меня есть вопрос о 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)
Так чего мне здесь не хватает?