Я знаю, что уже есть некоторые темы, касающиеся вышеупомянутой ошибки, но я все еще имею ее, несмотря на то, что:
- Я обновил Avro с 1.8.2 до 1.9.1. Предположительно, согласно этому веб-сайту: https://issues.apache.org/jira/browse/AVRO-1891, проблема уже была решена в 1.9.1.
- Мое поле метки времени не может быть пустым. Некоторые (большинство?) Люди, которые столкнулись с этой проблемой, сообщили, что она исчезла после того, как они удалили условие о том, что отметка времени может быть нулевой. В моем случае поле определяется как:
{
"name": "processingTime", "type": {
"type": "long",
"logicalType": "timestamp-millis"
}
Я думал о вставке следующего фрагмента кода. Это было взято с сайта, упомянутого выше:
final RecordV1 record = new RecordV1(DateTime.parse("2007-12-03T10:15:30.00Z"));
final SpecificData specificData = new SpecificData();
specificData.addLogicalTypeConversion(new TimeConversions.TimestampConversion());
final DatumWriter<RecordV1> datumWriter = new SpecificDatumWriter<>(record.getSchema(), specificData);
final ByteArrayOutputStream stream = new ByteArrayOutputStream(AvroUtil.DEFAULT_BUFFER_SIZE);
final BinaryEncoder encoder = EncoderFactory.get().directBinaryEncoder(stream, null);
datumWriter.write(record, encoder);
encoder.flush();
final byte[] bytes = stream.toByteArray();
Но я не знаю, куда его поместить (какой класс?), И я не уверен, будет ли он работать с экземпляромGenericRecord (созданный из схемы, считанной из реестра схемы)
Попытка решения, упомянутого здесь:
Kafka AVRO - преобразование из long в datetime , но не удалось найти класс, в который я должен вставить (изменить) этот фрагмент кода. Я также не уверен, будет ли он работать с экземпляром GenericRecord, потому что он имеет дело с SpecificRecord.