CodeWalk

消息序列化方案选型:Protobuf/Thrift/Avro/Hessian对比

作者:Yahuda · 2026-05-30 12:55

从性能、跨语言支持、Schema演进能力、生态集成等维度,对比分析Protobuf、Thrift、Avro、Hessian、JSON、MessagePack六种主流序列化方案,并给出选型建议。

回答

Yahuda

六种序列化方案综合对比:

1. 性能排行

  • 第1梯队:Protobuf ≈ MessagePack(极致性能)
  • 第2梯队:Thrift(Binary) ≈ Avro(优秀性能)
  • 第3梯队:Hessian(中等性能)
  • 第4梯队:JSON(Jackson)≈ XML(性能最低的文本格式)

2. 压缩比排行

  • 最佳:Protobuf(Varint/ZigZag)≈ Avro(无schema冗余)
  • 中等:Thrift(Compact) ≈ MessagePack
  • 较差:JSON ≈ Hessian

3. Schema演进能力 | 框架 | 向前兼容 | 向后兼容 | 必须Schema | |------|------|------|------| | Protobuf | ✅(字段编号+默认值) | ✅ | 是(.proto) | | Avro | ✅(Reader/Writer Schema) | ✅ | 推荐(JSON Schema) | | Thrift | ✅(字段编号) | ✅ | 是(.thrift) | | MessagePack | ❌ | ❌ | 否 | | JSON | ✅(新增字段忽略) | ❌ | 否 | | Hessian | ✅(版本兼容) | ✅ | 否 |

4. 跨语言支持

  • Protobuf:C++/Java/Python/Go/JS/... 20+语言
  • Thrift:C++/Java/Python/Go/JS/... 15+语言
  • Avro:Java/C/C++/Python/Ruby(Hadoop生态强)
  • JSON:所有语言
  • MessagePack:几乎所有语言
  • Hessian:Java为主

5. 生态集成

  • Protobuf:gRPC(默认)、Dubbo(可选)、Envoy、Terraform
  • Thrift:自建RPC框架、Apache Cassandra
  • Avro:Kafka(默认序列化方式)、Hadoop/Spark/Hive
  • JSON:几乎全部Web框架
  • MessagePack:Redis(Lua脚本用)、MongoDB(BSON)

6. 选型建议 | 场景 | 推荐方案 | |------|------| | RPC框架 | Protobuf(gRPC生态) | | 大数据管道 | Avro(Hadoop/Kafka) | | 高性能内部RPC | Thrift | | REST API | JSON | | 缓存序列化 | MessagePack | | 遗留Java RPC | Hessian(Dubbo协议) |