Ошибка истечения времени ожидания реестра конфлюентной схемы

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

Файл Avro: {

"type": "record", "name": "Initiate_Scan", "namespace": "avro", "doc": "Реестр схемы Avro для Initiate_Scan", "fields": [{"name": "app_id", "тип": "строка", "документ": "трехзначный идентификатор приложения"},

{
  "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 ":" трехзначный идентификатор приложения "}, {" name ":" app_name "," type ": {" type ":" string "," avro.java.string ":" String "}," doc ": "application name"}, {"name": "dev_stage", "type": {"type": "string", "avro.java.string": "String"}, "doc": "этап разработки"} , {"name": "scan_app_id", "type": {"type": "string", "avro.java.string": "String"}, "doc": "уникальный идентификатор сканирования для приложения "}, {" 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 "," делать c ":" уникальный идентификатор "}, {" name ":" scan_number "," type ":" int "," doc ":" количество сканирований "}]}

ИНФОРМАЦИЯ Закрытие производителя Kafka с таймаутом Миллис = 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.httpRequest.java: RestService.httpRequest.java: в io.confluent.kafka.schemaregistry.client.rest.RestService.registerSchema (RestService.java:292) в io.confluent.kafka.schemaregistry.client.rest.RestService.registerSchema (RestService.java.conflux: 284) .kafka.schemaregistry.client.rest.RestService.registerSchema (RestService.java:279) в io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.registerAndGetId (CachedSchemaRegistryClient.registerAndGetId (CachedSchemaRegistryClient.registerAndGetId (CachedSchemaRegistryClient.registerAndGetId) (CachedSchemaRegistryClient). .CachedSchemaRegistryClient.register (CachedSchemaRegistryClient.java:93) в io.confluent.kafka.serializers.AbstractKafkaAvroSerializer.serializeImpl (AbstractKafkaAvroSerializer.java:72) at io.confluizer.AvroSerializer. org.a pache.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.InitiateScroducerData.initiate InitiateProducer.java:146) в com.ssc.svc.svds.initiate.InitiateProducer.topicsData (InitiateProducer.java:41) в com.ssc.svc.svds.initiate.InputData.main (InputData.java:31)

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

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

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

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


person Eshwar P    schedule 18.04.2019    source источник
comment
Можете ли вы поделиться свойствами конфигурации реестра схем вместе со схемами Avro?   -  person Giorgos Myrianthous    schedule 18.04.2019
comment
обновлен с подробностями схемы avro и полной ошибкой   -  person Eshwar P    schedule 18.04.2019
comment
В нашем случае, когда мы запускаем приложение в первый раз с новым идентификатором приложения, возникает эта ошибка. Но когда мы запускаем второй раз с тем же идентификатором приложения, оно запускается. Как это отладить?   -  person Cyber Knight    schedule 21.09.2020


Ответы (1)


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

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

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

Простой список разрешенные изменения Avro, которые я обнаружил, принадлежат Oracle

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

  • Поле добавляется без значения по умолчанию
person OneCricketeer    schedule 18.04.2019
comment
{name: scan_app_id, type: string, doc: уникальный идентификатор сканирования для приложения в veracode, по умолчанию: 9999} те же ошибки даже после добавления значения по умолчанию. - person Eshwar P; 19.04.2019
comment
Я бы начал с общей сетевой отладки. Можете ли вы curl использовать этот URL вне вашего приложения Java? Принимает ли сервер соединения от вашего приложения? Правила брандмауэра и т. Д.? - person OneCricketeer; 19.04.2019
comment
да, если я удалю это новое поле. даже сейчас все работает нормально. Итак, я не думаю, что есть какие-то проблемы с сетевыми подключениями. - person Eshwar P; 19.04.2019