如何解决HDInsight集群Kafka 0.10.1的kafka-connect-jdbc启动报错SYSTEM字段缺失
解决HDInsight Kafka 0.10.1中kafka-connect-jdbc启动报错
java.lang.NoSuchFieldError: SYSTEM的问题 我之前在旧版本Kafka环境里也碰到过这个报错,大概率是依赖版本不兼容搞出来的问题,咱们一步步来解决:
先搞懂为啥会报错
这个SYSTEM字段一般是在org.apache.kafka.common.config.types.Password类里的,Kafka 0.10.1版本的类库根本没这个字段——你编译的kafka-connect-jdbc如果用了较新的Confluent或Kafka客户端依赖,就会出现这种“找不到字段”的冲突,毕竟新依赖里引用了旧Kafka没有的东西。
具体解决步骤
1. 找对kafka-connect-jdbc的对应版本
Kafka 0.10.1对应的Confluent平台版本是3.2.x(比如3.2.2),别直接克隆最新仓库编译,得切换到这个版本的分支:
- 克隆kafka-connect-jdbc的3.2.x分支代码
- 执行
mvn install -DskipTests编译,这样所有依赖都会和Kafka 0.10.1适配
2. 补全/替换匹配的依赖包
如果编译完还是有问题,得检查libs目录里的依赖是否匹配:
kafka-clients必须是0.10.1.x版本connect-api也要对应0.10.1.x版本confluent-common用3.2.x版本
把这些匹配版本的jar包放到Kafka的./libs目录,覆盖原有可能冲突的包(记得先备份原文件,别搞砸了)。
3. 检查连接器配置是否兼容
别用新版本连接器的配置参数,Kafka 0.10.1不认。给你个适配Azure SQL Server的源连接器配置示例:
{ "name": "sqlserver-source-connector", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url": "jdbc:sqlserver://<你的SQL Server地址>.database.windows.net:1433;database=<数据库名>;user=<用户名>;password=<密码>", "mode": "incrementing", "incrementing.column.name": "id", "topic.prefix": "sqlserver-", "poll.interval.ms": 5000, "batch.max.rows": 100 } }
4. 重启Kafka Connect服务
更新完jar和配置后,必须重启服务让新类库生效:
- 可以通过HDInsight的Ambari界面找到Kafka Connect,点重启
- 或者SSH登集群节点,执行
sudo systemctl restart kafka-connect(具体命令看HDInsight版本调整)
验证是否解决
- 再调用
GET /connector-plugins接口,确认JDBC连接器还在 - 启动连接器后,去
/var/log/kafka/connect/目录看日志,有没有报错 - 检查对应的Kafka主题有没有数据进来,能正常产数据就说明搞定了
内容的提问来源于stack exchange,提问作者Mark Shehata
相关产品推荐
相关产品推荐

