如何在Strimzi部署的Kafka Connect中使用Apicurio AvroConverter
解决Apicurio Registry AvroConverter在Kafka Connect中类缺失问题
正确的依赖清单
你需要确保引入版本完全一致的以下Apicurio依赖包(版本需与你的Apicurio Registry服务版本匹配):
apicurio-registry-utils-converter:核心Kafka Connect Converter实现apicurio-registry-serdes-avro:包含io.apicurio.registry.serde.avro.AvroKafkaSerializer等Avro序列化/反序列化核心类(你之前用的apicurio-registry-serdes-avro-serde是旧版本命名,已废弃)apicurio-registry-rest-client:Converter与Apicurio Registry服务通信的客户端依赖
Maven坐标示例
如果用Maven管理依赖,添加以下配置:
<dependency> <groupId>io.apicurio</groupId> <artifactId>apicurio-registry-utils-converter</artifactId> <version>2.5.5.Final</version> <!-- 替换为你的Apicurio版本 --> </dependency> <dependency> <groupId>io.apicurio</groupId> <artifactId>apicurio-registry-serdes-avro</artifactId> <version>2.5.5.Final</version> </dependency> <dependency> <groupId>io.apicurio</groupId> <artifactId>apicurio-registry-rest-client</artifactId> <version>2.5.5.Final</version> </dependency>
Docker镜像构建建议(基于Strimzi Kafka Connect)
若你是通过Dockerfile自定义Kafka Connect镜像,需将所有依赖JAR(包括传递依赖)复制到Connect插件目录(如/opt/kafka/plugins/apicurio-converter)。推荐用Maven的dependency:copy命令批量导出所有依赖,避免手动下载遗漏:
# 在本地项目执行,导出所有依赖到target/apicurio-libs目录 mvn dependency:copy -DoutputDirectory=target/apicurio-libs -Dartifact=io.apicurio:apicurio-registry-utils-converter:2.5.5.Final,io.apicurio:apicurio-registry-serdes-avro:2.5.5.Final,io.apicurio:apicurio-registry-rest-client:2.5.5.Final -Dtransitive=true
然后在Dockerfile中复制:
FROM quay.io/strimzi/kafka:0.38.0-kafka-3.5.1 # 创建插件目录 RUN mkdir -p /opt/kafka/plugins/apicurio-converter # 复制本地导出的依赖JAR COPY target/apicurio-libs/*.jar /opt/kafka/plugins/apicurio-converter/
连接器配置要点
确保JDBC Sink Connector的配置中正确指定Converter及Registry地址:
value.converter=io.apicurio.registry.utils.converter.AvroConverter value.converter.apicurio.registry.url=http://<apicurio-registry-host>:<port>/apis/registry/v2 value.converter.apicurio.registry.auto-register=true # 可选:配置Schema兼容性规则 value.converter.apicurio.registry.compatibility=BACKWARD
关键注意事项
- 版本一致性:所有Apicurio依赖包的版本必须与你的Apicurio Registry服务版本完全一致,否则会出现类不兼容或找不到的问题。
- 避免混合依赖:不要同时引入Confluent的Avro相关依赖,防止类加载冲突。
内容的提问来源于stack exchange,提问作者Hongbo Miao
相关产品推荐
相关产品推荐

