Confluent CLI无schema-registry选项,Docker环境下如何上传Avro Schema?
问题原因及解决方案
一、Confluent CLI 无 schema-registry 顶层命令的原因
命令结构版本差异
你参考的是Confluent CLI 3.3版本的文档,而实际安装的v3.32.1版本已调整命令结构:schema-registry相关命令不再作为顶层命令存在,而是归属于confluent local子命令,或需先配置并切换到Confluent Platform上下文才会显示。未配置对应上下文
若你的Schema Registry是本地Docker部署的自管理实例,需先通过CLI配置指向该实例的上下文,否则CLI默认仅显示Confluent Cloud相关命令,不会加载schema-registry相关功能。
二、上传Avro Schema到Docker中Schema Registry的替代方法
鉴于端口防火墙限制无法直接通过主机调用REST API,可采用以下方案:
1. 进入Schema Registry容器内部操作
- 查找容器ID:
docker ps | grep schema-registry - 将本地avsc文件复制到容器内:
docker cp /本地路径/你的schema文件.avsc <容器ID>:/tmp/ - 进入容器并调用内部REST API上传:
docker exec -it <容器ID> bash # 在容器内执行curl命令 curl -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json" \ --data '{"schema": "$(cat /tmp/你的schema文件.avsc)"}' \ http://localhost:8081/subjects/目标subject名称-value/versions
2. 利用Docker网络跨容器调用
通过启动临时curl容器,加入到Kafka集群所在的Docker网络,直接访问Schema Registry容器:
# 先查看Kafka集群的Docker网络名称 docker network ls # 执行上传命令,替换占位符 docker run --rm --network <Kafka网络名称> curlimages/curl \ -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json" \ --data '{"schema": "'"$(cat /本地路径/你的schema文件.avsc)"'"}' \ http://schema-registry:8081/subjects/目标subject名称-value/versions
注:schema-registry为容器名,若你的容器名不同需对应修改。
3. 配置CLI上下文后使用命令(若主机可间接访问容器端口)
若能通过端口转发等方式让主机访问到Schema Registry的8081端口,可先配置CLI上下文:
# 创建指向本地Schema Registry的上下文 confluent context create local-sr --schema-registry-url http://localhost:8081 # 切换到该上下文 confluent context use local-sr # 执行schema上传命令 confluent schema-registry schema create 目标subject名称-value --schema /本地路径/你的schema文件.avsc
内容的提问来源于stack exchange,提问作者asb
相关产品推荐
相关产品推荐

