如何在无Confluent环境下运行Apache Kafka Schema Registry
无Confluent环境对接原生Apache Kafka部署Schema Registry方案
首先明确:不存在Schema Registry必须绑定Confluent全环境才能运行的限制,以下是完全可落地的实现路径,不需要部署Confluent平台的其他组件:
方案1:使用全开源独立实现Apicurio Registry(最推荐,生产可用)
- 协议完全兼容:支持Avro、Protobuf、JSON Schema等主流序列化格式,API层100%兼容Confluent Schema Registry的接口规范,原有业务侧的序列化/反序列化代码几乎不需要调整
- 无额外依赖:本身是Apache 2.0协议的独立项目,运行时不需要任何Confluent组件,直接对接原生Apache Kafka集群即可
- 部署流程:
- 获取官方二进制发行包,解压到部署目录
- 修改配置文件
application.properties,配置核心参数:kafka.bootstrap.servers=你的原生Kafka集群broker地址列表- 确认存储后端选择Kafka模式(默认配置即为该模式),指定存储schema元数据的内部topic名称,默认值为
schemas
- 提前在Kafka中创建上述内部topic,设置
cleanup.policy=compact日志压缩策略,分区数根据集群规模设置即可,不需要额外配置数据库等其他存储 - 执行目录下的启动脚本即可拉起服务,默认服务端口为8080,可按需修改。
方案2:自行实现轻量Schema Registry(适合定制化场景)
如果不想引入第三方服务,完全可以基于原生Kafka能力实现符合自身需求的Schema Registry,核心逻辑非常简单:
- 存储层:提前在Kafka中创建开启日志压缩的专属topic,key存储schema唯一标识(可按
业务域:subject名:版本号规则拼接),value存储序列化后的schema内容、兼容性规则、创建时间等元数据,依托Kafka日志压缩能力永久保留所有历史schema版本 - 服务层:开发无状态的HTTP服务,实例启动时全量消费该topic的所有记录,将全量schema加载到本地内存缓存,后续实时消费topic增量消息更新缓存;对外提供schema注册、版本查询、兼容性校验、schema ID映射查询等接口即可
- 客户端:业务侧生产/消费时只需要调用该HTTP服务获取对应schema完成序列化/反序列化,不需要引入任何Confluent相关依赖。
补充说明
注意:Confluent维护的开源版Schema Registry本身也不需要依赖Confluent全平台运行,只需要对接原生Apache Kafka集群即可启动,但如果你的诉求是完全不使用任何Confluent出品的组件,直接选择上述两个方案即可。
所有方案通用注意事项:存储schema的Kafka topic必须开启日志压缩策略,禁止配置基于时间/大小的日志删除规则,否则历史schema版本会被Kafka自动清理,导致业务侧反序列化失败。
内容的提问来源于stack exchange,提问作者vivek verma
相关产品推荐
相关产品推荐

