主流 Schema Registry 产品对比

市面上 Schema Registry 产品不少,但真正能打的也就四家。我这些年挨个用过,踩过坑也填过坑。今天咱们就掰开揉碎,看看它们各自什么路数。

先放一张总览图,帮你快速建立全局认知。

主流 Schema Registry 产品对比总览 Schema Registry Confluent Schema Registry Apicurio Registry Hortonworks Schema Registry AWS Glue Schema Registry 核心特性 • Avro/Protobuf/JSON • Kafka 原生集成 • 兼容性检查 核心特性 • 多格式支持 • REST API 完善 • 开源可扩展 核心特性 • Hadoop 生态 • 安全集成 • 版本管理 核心特性 • 全托管服务 • 与 Glue 集成 • 自动发现 适用场景 Kafka 重度用户 Confluent 平台 适用场景 多云/混合架构 开源优先 适用场景 HDP 集群 企业安全要求高 适用场景 AWS 原生 无服务器架构

Confluent Schema Registry

这玩意儿是 Schema Registry 界的「老大哥」。我最早接触它是在 2018 年,当时公司刚上 Kafka,数据格式乱成一锅粥。Confluent 的方案最成熟,文档也最全。

它的核心优势很明显:

  • Kafka 原生集成 —— 序列化器直接对接 Kafka Producer/Consumer,一行配置就能用
  • 兼容性策略丰富 —— BACKWARD、FORWARD、FULL、NONE,四种策略随便选
  • 多格式支持 —— Avro 是亲儿子,Protobuf 和 JSON Schema 后来也跟上了

个人经验:我建议新手先从 Confluent 入手。它的生态最完整,遇到问题社区里基本都有答案。但要注意,Confluent 的免费版有集群节点数限制,生产环境建议直接上企业版。

配置示例:

# 生产者配置
props.put("key.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer");
props.put("value.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer");
props.put("schema.registry.url", "http://localhost:8081");

# 消费者配置
props.put("key.deserializer", "io.confluent.kafka.serializers.KafkaAvroDeserializer");
props.put("value.deserializer", "io.confluent.kafka.serializers.KafkaAvroDeserializer");
props.put("schema.registry.url", "http://localhost:8081");
props.put("specific.avro.reader", "true");

避坑指南:我曾经在生产环境遇到过一个问题——默认的兼容性策略是 BACKWARD,但业务方直接改了字段类型,导致消费者全部报错。后来我强制要求所有 Schema 变更必须走审批流程,兼容性策略统一设为 FULL。

Apicurio Registry

Apicurio 是红帽家的开源产品。说实话,我第一次用它是被逼的——客户要求全开源方案,Confluent 的企业版太贵了。

用下来发现,Apicurio 其实挺能打:

  • API 设计更现代 —— 完全遵循 RESTful 风格,Swagger 文档直接可用
  • 多格式支持不输 Confluent —— Avro、Protobuf、JSON Schema、OpenAPI、AsyncAPI 都能管
  • 存储后端灵活 —— 支持 Kafka、PostgreSQL、Infinispan,甚至内存模式

我个人习惯用 PostgreSQL 做后端,数据持久化有保障,也方便做备份。

REST API 示例:

# 注册 Schema
curl -X POST http://localhost:8080/api/v2/groups/default/artifacts \
  -H "Content-Type: application/json" \
  -d '{
    "type": "AVRO",
    "content": "{\"type\":\"record\",\"name\":\"User\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"}]}"
  }'

# 查询 Schema 版本
curl http://localhost:8080/api/v2/groups/default/artifacts/User/versions

小技巧:Apicurio 的 Web UI 做得不错,可视化查看 Schema 演进历史很方便。我经常用它来给业务方演示 Schema 变更的影响范围。

Hortonworks Schema Registry

这个产品现在叫「Apache Atlas Schema Registry」了,但老人都习惯叫 Hortonworks。它跟 Hadoop 生态绑得很紧。

说实话,如果你不是 HDP 用户,我不太推荐它。原因有三:

  • 集成成本高 —— 需要依赖 Atlas、Ranger 等一堆组件
  • 社区活跃度低 —— 更新慢,问题响应也慢
  • 格式支持有限 —— 主要就是 Avro,Protobuf 支持很弱

但它也有自己的亮点:

  • 安全集成强 —— 跟 Ranger 配合,能做到字段级别的权限控制
  • 血缘追踪 —— Schema 变更能自动关联到下游作业

避坑指南:我曾经在一个 HDP 集群上部署 Hortonworks Schema Registry,折腾了两天才跑起来。问题出在版本兼容性上——HDP 3.1 必须用特定版本的 Schema Registry,否则 Atlas 集成会报错。所以如果你要用,一定先查好版本对应关系。

AWS Glue Schema Registry

这是亚马逊的全托管服务。说白了,你什么都不用管,只管用就行。

它的特点很鲜明:

  • 零运维 —— 不需要部署,不需要调优,开箱即用
  • 自动发现 —— 能从 S3 数据中自动推断 Schema
  • 与 Glue 生态集成 —— ETL 作业、数据目录、爬虫全打通

但要注意,它也有短板:

  • 厂商锁定 —— 离开 AWS 就没法用
  • 格式支持有限 —— Avro、Protobuf、JSON Schema,但自定义格式就别想了
  • 兼容性策略少 —— 只有 BACKWARD 和 FORWARD,没有 FULL

配置示例(Java SDK):

GlueSchemaRegistryClient client = GlueSchemaRegistryClient.builder()
    .region(Region.US_EAST_1)
    .build();

// 注册 Schema
CreateSchemaRequest request = new CreateSchemaRequest()
    .withSchemaName("UserSchema")
    .withDataFormat(DataFormat.AVRO)
    .withCompatibility(Compatibility.BACKWARD)
    .withSchemaDefinition("{\"type\":\"record\",\"name\":\"User\",\"fields\":[...]}");

client.createSchema(request);

小技巧:如果你公司已经在 AWS 上,而且 Kafka 用的是 MSK,那 Glue Schema Registry 是最省心的选择。我有个客户就是这么干的,运维成本几乎为零。

横向对比总结

说了这么多,咱们用一张表收个尾。你选型的时候直接对着看就行。

维度 Confluent Apicurio Hortonworks AWS Glue
部署方式 自建/企业版 自建 自建 全托管
格式支持 Avro、Protobuf、JSON Avro、Protobuf、JSON、OpenAPI、AsyncAPI Avro 为主 Avro、Protobuf、JSON
兼容性策略 BACKWARD、FORWARD、FULL、NONE BACKWARD、FORWARD、FULL、NONE BACKWARD、FORWARD BACKWARD、FORWARD
Kafka 集成 原生 通过 Serde 通过 Serde 通过 MSK 集成
安全能力 RBAC、审计 RBAC Ranger 集成 IAM
社区活跃度 高 中 低 中
适用场景 Kafka 重度用户 多云/开源优先 HDP 集群 AWS 原生

嗯,选哪个其实没有标准答案。我个人的建议是:

  • 如果你用 Confluent Kafka,闭眼选 Confluent Schema Registry
  • 如果你追求开源、多云,Apicurio 是性价比最高的选择
  • 如果你还在用 HDP,那 Hortonworks 是不得不选的选项
  • 如果你全在 AWS 上,Glue Schema Registry 最省心