使用Schema Registry Transfer SMT插件时类找不到问题求助
排查Schema Registry Transfer SMT插件加载失败问题
核心错误信息
PUT /connectors/kafka-connector-sb-16-sb-16/config 返回400(Bad Request):Connector配置无效,包含2个错误:
- 配置transforms.AvroSchemaTransfer.type的值cricket.jmoore.kafka.connect.transforms.SchemaRegistryTransfer无效:找不到该类
- 配置transforms.AvroSchemaTransfer.type的值null无效:不是Transformation
排查步骤
1. 确认插件镜像的目录结构符合Strimzi要求
Strimzi Kafka Connect默认从/opt/kafka/plugins下的子目录加载插件,不能直接将JAR放在plugins根目录:
- 检查Dockerfile,确保插件JAR被复制到
plugins的子文件夹中,示例:COPY target/schema-registry-transfer-*.jar /opt/kafka/plugins/schema-registry-transfer/ - 进入Connect Pod验证目录内容:
kubectl exec <connect-pod-name> -- ls /opt/kafka/plugins/schema-registry-transfer
2. 验证插件JAR的兼容性与完整性
该插件仓库最后更新于2019年,依赖版本大概率与当前Strimzi集群不匹配:
- 将插件的
kafka-clients、connect-api依赖版本升级到与你的Kafka集群一致的版本,重新构建胖JAR(注意将Kafka核心依赖设为providedscope,避免与Connect内置依赖冲突)。 - 检查胖JAR是否包含目标类:
jar tf target/your-fat-jar.jar | grep SchemaRegistryTransfer
3. 确认Connect的插件加载逻辑
- 查看Connect Pod日志,确认插件是否被加载:
kubectl logs <connect-pod-name> | grep "SchemaRegistryTransfer" - Strimzi默认无需手动配置
plugin.path,但如果自定义了该参数,需确保包含插件所在目录。 kubectl describe KafkaConnect未列出插件可能是Strimzi扫描逻辑未检测到,以Pod内实际目录和日志为准。
4. 修正Connector配置的语法错误
错误中出现值null无效,说明配置存在语法问题:
- 检查Connector YAML配置,确保
transforms.AvroSchemaTransfer.type只定义一次且值正确,示例:transforms: AvroSchemaTransfer transforms.AvroSchemaTransfer.type: cricket.jmoore.kafka.connect.transforms.SchemaRegistryTransfer # 插件其他配置参数
5. 替代方案(若插件升级不可行)
由于该插件长期未维护,可考虑:
- 使用官方
AvroConverter配合schema.registry.url实现Schema同步。 - 自定义轻量SMT实现类似功能,避免依赖未维护的第三方插件。
内容的提问来源于stack exchange,提问作者Michał Sobczyk
相关产品推荐
相关产品推荐

