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