Apache Avro — row-oriented binary data format, разработанный ASF (2009). Основа для serialization в Kafka, streaming systems. Key feature: schema-first (JSON-defined) + schema evolution (add/drop fields backward-compatible). Compact wire format, быстрый serialize/deserialize. Used by: Confluent Kafka Schema Registry, Apache Pulsar, Airbyte.
Ниже: подробности, пример, смежные термины, FAQ.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
{
"type": "record",
"name": "User",
"fields": [
{"name": "id", "type": "long"},
{"name": "email", "type": "string"},
{"name": "age", "type": ["null", "int"], "default": null}
]
}
# Python (fastavro)
import fastavro
with open('users.avro', 'wb') as out:
fastavro.writer(out, schema, records)Apache Avro — это формат сериализации данных, ориентированный на схемы, который позволяет эффективно хранить и передавать данные между различными системами. Он использует JSON для определения схемы, что обеспечивает удобство и гибкость при работе с данными. Avro поддерживает как бинарный, так и JSON-форматы, что делает его идеальным для использования в распределённых системах, таких как Hadoop и Kafka.
Apache Avro предлагает множество преимуществ, среди которых:
В дополнение к этим преимуществам, Avro также поддерживает версионирование схем, что позволяет изменять структуру данных без потери совместимости с предыдущими версиями.
Рассмотрим практический пример работы с Apache Avro. Предположим, у нас есть схема данных для хранения информации о пользователях:
{
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "age", "type": "int"},
{"name": "email", "type": "string"}
]
}Эта схема описывает запись пользователя с тремя полями: имя, возраст и электронная почта. Теперь, чтобы сериализовать данные в формат Avro, можно использовать следующую команду на Python:
import avro.schema
import avro.datafile
import avro.io
schema = avro.schema.parse(open("user.avsc").read())
with open("users.avro", "wb") as out:
writer = avro.datafile.DataFileWriter(out, avro.io.DatumWriter(), schema)
writer.append({"name": "Alice", "age": 30, "email": "alice@example.com"})
writer.append({"name": "Bob", "age": 25, "email": "bob@example.com"})
writer.close()В этом примере мы создаём файл "users.avro", в который записываются данные о пользователях согласно заданной схеме. Avro обеспечивает автоматическую проверку данных на соответствие схеме, что исключает возможность ошибок при сериализации.
Avro: schema в message/file, dynamic. Protobuf: schema compiled в code. Protobuf более type-safe, но Avro лучше для streaming с changing schemas.
Avro: streaming (Kafka), один message = один record. Parquet: batch analytics, columnar scans. Complement.
Для Kafka prod — yes. Enforces schema evolution rules, prevents breaking changes. Confluent Cloud или self-host.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.