Неизвестный магический байт с kafka-avro-console-consumer

Я пытался подключиться с kafka-avro-console-consumer из Confluent к нашему устаревшему кластеру Kafka, который был развернут без реестра Confluent Schema Registry. Я предоставил схему, явно используя такие свойства, как:

kafka-console-consumer --bootstrap-server kafka02.internal:9092 \
    --topic test \
    --from-beginning \
    --property key.schema='{"type":"long"}' \
    --property value.schema='{"type":"long"}'

но я получаю "Неизвестный магический байт!" ошибка с org.apache.kafka.common.errors.SerializationException

Можно ли использовать сообщения Avro из Kafka с помощью Confluent kafka-avro-console-consumer, которые не были сериализованы с помощью AvroSerializer из Confluent и с помощью реестра схем?


person Martin Macak    schedule 19.09.2018    source источник


Ответы (2)


Сериализатор / десериализатор реестра Confluent Schema Registry использует формат проводов , который включает информацию об идентификаторе схемы и т. д. в начальных байтах сообщения.

Если ваше сообщение не было сериализовано с помощью сериализатора реестра схем, вы не сможете десериализовать его с его помощью и получите ошибку Unknown magic byte!.

Поэтому вам нужно написать потребителя, который извлекает сообщения, выполняет десериализацию с использованием ваших схем Avro avsc, а затем, предполагая, что вы хотите сохранить данные, повторно сериализовать их, используя Сериализатор реестра схемы

Изменить: Недавно я написал статью, в которой все это объясняется более подробно: https://www.confluent.io/blog/kafka-connect-deep-dive-converters-объяснениесериализации

person Robin Moffatt    schedule 19.09.2018

kafka-console-consumer ничего не знает о key.schema или value.schema, только производитель Avro. Исходный код здесь

Обычный потребитель консоли не заботится о формате данных - он просто печатает байты в кодировке UTF8.

kafka-avro-console-consumer принимает свойство только schema.registry.url. Итак, чтобы ответить на вопрос, да, его нужно сериализовать с помощью сериализаторов Confluent.

person OneCricketeer    schedule 19.09.2018