Схема в авро сообщении
Я вижу, что в сообщения Avro встроена схема, а затем данные в двоичном формате. Если отправлено несколько сообщений и для каждого сообщения создаются новые avro-файлы, разве схема не встраивает накладные расходы? Итак, значит ли это, что для продюсера всегда важно пакетировать сообщения, а затем записывать, поэтому несколько сообщений, записываемых в один файл avro, содержат только одну схему? С другой стороны, есть ли возможность устранить встраивание схемы при сериализации с использованием средств записи Generic/SpecificDatum?
1 ответ
Я читаю следующие пункты из Avro Specs
- Apache Avro - это система сериализации данных.
- Авро опирается на схемы.
- Когда данные Avro читаются, схема, используемая при записи, всегда присутствует.
- Цель сериализации - избежать накладных расходов по каждому значению, сделать сериализацию как быстрой, так и небольшой.
- Когда данные Avro хранятся в файле, его схема сохраняется вместе с ним.
Вы не должны использовать систему сериализации данных, если вы хотите написать 1 новый файл для каждого нового сообщения. Это противоположно цели сериализации. В этом случае вы хотите разделить метаданные и данные.
Нет возможности удалить схему при записи файла avro. Это было бы против спецификации avro.
IMO, должен быть баланс при пакетировании нескольких сообщений в один файл avro. Avro файлы должны быть идеально разбиты, чтобы повысить эффективность ввода / вывода. В случае HDFS размер блока будет идеальным для размера файла avro.
Вы правы, есть накладные расходы, если вы пишете одну запись со схемой. Это может показаться расточительным, но в некоторых сценариях возможность создания записи из данных с использованием этой схемы более важна, чем размер полезной нагрузки.
Также учтите, что даже с включенной схемой данные кодируются в двоичном формате, поэтому в любом случае они обычно меньше, чем Json.
И, наконец, такие фреймворки, как Kafka, могут подключаться к реестру схем, где вместо сохранения схемы с каждой записью они хранят указатель на схему.