Сравнение форматов сериализации
Schema vs Schemaless
Фундаментальный выбор: нужна ли предварительная схема?
Wire Size Comparison
Сравним одинаковые данные во всех форматах. Тестовое сообщение: User(id=150, name="Alice", email="[email protected]", active=true).
Avro самый компактный (нет field tag overhead), но требует writer’s schema для декодирования. Protobuf и Thrift TCompact почти одинаковы. MessagePack в ~2x больше schema-based форматов из-за ключей. JSON в ~3x больше. При компрессии (gzip, zstd) разница сокращается: текстовые форматы сжимаются лучше, но бинарные всё равно выигрывают.
Parse Speed
Language Support
Use Cases: когда что
Нужен RPC framework?
Первый вопрос: нужен ли встроенный RPC framework? Если да — Thrift (всё-в-одном) или gRPC (Protobuf + HTTP/2).Нужна schema + type safety?
Нужна ли schema и type safety? Если да — Protobuf или Avro. Если нет — MessagePack.Kafka/streaming или API/micro?
Kafka/event streaming → Avro (Schema Registry, GenericRecord). API/microservices → Protobuf (gRPC, mobile, code gen).Feature Matrix
Wire Size: масштабный пример
1000 × User (id, name, email, age, active, tags[3])
1000 User records, каждый: id(int), name(~10 chars), email(~20 chars), age(int), active(bool), tags(3 strings ~5 chars each). Без компрессии.С компрессией разница между форматами сокращается: JSON (12 KB) vs Protobuf (9 KB) vs Avro+deflate (7 KB). Но: (1) компрессия стоит CPU, (2) parse speed не зависит от wire size — бинарные форматы всё равно парсятся быстрее. Для high-throughput систем важнее parse speed, чем wire size.
Миграция между форматами
Итоговые рекомендации
Не существует «лучшего формата». Каждый оптимален для своей ниши: Protobuf для APIs, Avro для streaming, MessagePack для caching, Parquet для аналитики. Зрелая data architecture использует несколько форматов на разных уровнях (см. урок 05 модуля Avro — pipeline с gRPC + Kafka + S3).