Ошибка истечения времени ожидания реестра схемы - PullRequest
2 голосов
/ 18 апреля 2019

Я использую схему Avro для записи данных в тему Кафки.Изначально все работало нормально.После добавления еще одного нового поля (scan_app_id) в файл avro.Я сталкиваюсь с этой ошибкой.

Файл Avro: {

"тип": "запись", "имя": "Initiate_Scan", "пространство имен": "avro","doc": "реестр схемы Avro для Initiate_Scan", "fields": [{"name": "app_id", "type": "string", "doc": "3-значный идентификатор приложения"},

{
  "name": "app_name",
  "type": "string",
  "doc": "application name"
},
{
  "name": "dev_stage",
  "type": "string",
  "doc": "development stage"
},
{
  "name": "scan_app_id",
  "type": "string",
  "doc": "unique scan id for an app in Veracode"
 },
{
  "name": "scan_name",
  "type": "string",
  "doc": "scan details"
},
{
  "name": "seq_num",
  "type": "int",
  "doc": "unique number"
},
{
  "name": "result_flg",
  "type": "string",
  "doc": "Y indicates results of scan available",
  "default": "Y"
},
 {
   "name": "request_id",
   "type": "int",
   "doc": "unique id"
 },
  {
    "name": "scan_number",
    "type": "int",
    "doc": "number of scans"
  }   ] }

Ошибка: вызвано: org.apache.kafka.common.errors.SerializationException: Ошибка регистрации схемы Avro: {"type": "record", "name": "Initiate_Scan", "namespace": "avro"," doc ":" Реестр схемы Avro для Initiate_Scan "," fields ": [{" name ":" app_id "," type ": {" type ":" string "," avro.java.string ":"String "}," doc ":" 3-значный идентификатор приложения "}, {" name ":" app_name "," type ": {" type ":" string "," avro.java.string ":" String "}, "doc": "имя приложения"}, {"name": "dev_stage", "type": {"type": "string", "avro.java.string": "String"}, "doc":"этап разработки"}, {"name": "scan_app_id", "type": {"type": "string", "avro.java.string": "String"}, "doc": "uniqueидентификатор сканирования для приложения "}, {" name ":" scan_name "," type ": {" type ":" string "," avro.java.string ":" String "},"doc ":" детали сканирования "}, {" name ":" seq_num "," type ":" int "," doc ":" уникальный номер "}, {" name ":" result_flg "," type ": {"type": "string", "avro.java.string": "String"}, "doc": "Y указывает на результаты сканирования, доступные", "default": "Y"}, {"name": "request_id"," type ":" int "," doc ":" уникальный идентификатор "}, {" name ":" scan_number "," type ":" int "," doc ":" количество сканирований "}]}

ИНФОРМАЦИЯ Закрытие производителя Kafka с помощью timeoutMillis = 9223372036854775807 мс.(org.apache.kafka.clients.producer.KafkaProducer: 1017) Вызвано: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: зарегистрировано тайм-аут операции регистрации;код ошибки: 50002 в io.confluent.kafka.schemaregistry.client.rest.RestService.sendHttpRequest (RestService.java:182) в io.confluent.kafka.schemaregistry.client.rest.RestService.httpReviceest.20на io.confluent.kafka.schemaregistry.client.rest.RestService.registerSchema (RestService.java:292) на io.confluent.kafka.schemaregistry.client.rest.RestService.registerSchema (RestService.javao: at4).kafka.schemaregistry.client.rest..CachedSchemaRegistryClient.register (CachedSchemaRegistryClient.java:93) по адресу io.confluent.kafka.serializers.AbstractKafkaAvroSerializer.serializeImpl (AbstractKafkaAvroSerializer.java:72.kaafjerkaerv.v.org.apache.kafka.common.serialization.ExtendedSerializer $ Wrapper.serialize (ExtendedSerializer.java:65) в org.apache.kafka.common.serialization.ExtendedSerializer $ Wrapper.serialize (ExtendedSerializer.java:55) в org.apache.kafka.clients.producer.KafkaProducer.doSend (KafkaProducer.java:768) в org.apache.kafka.clients.producer.KafkaProducer.send (KafkaProducer.java:745) в com.ssc.svc.svds.initiate.InitiateProducer.initiateScanData (InitiateProducer.java:146) в com.ssc.svc.svds.initiate.InitiateProducer.topicsData (InitiateProducer.java:41) на com.ssc.svc.svds.initiate.InputData.main (InputData.java:31)

Я прошел Конфиденциальная документация ошибка 50002, в которой говорится

Схема должна быть совместима с ранее зарегистрированной схемой.

Означает ли это, что я не могу внести изменения /обновить существующую схему?

Как это исправить?

1 Ответ

0 голосов
/ 18 апреля 2019

На самом деле ссылка говорит 50002 -- Operation timed out. Если бы это было действительно несовместимо, ответ фактически сказал бы так.

В любом случае, если вы добавляете новое поле, вам необходимо определить значение default.

Таким образом, любые потребители, определенные с более новой схемой, которые читают старые сообщения, знают, какое значение установить в этом поле.

Простой список разрешенных Avro изменений, найденных мной, от Oracle

Возможные ошибки:

  • Поле добавляется без значения по умолчанию
...