Debezium实现MySQL到Kafka CDC时遇NoSuchMethodError错误求助
解决Debezium CDC到JDBC Sink的
NoSuchMethodError增量同步问题 问题根源
这个错误java.lang.NoSuchMethodError: org.apache.kafka.connect.runtime.InternalSinkRecord.originalRecord()是版本兼容性不匹配导致的:
InternalSinkRecord.originalRecord()方法是Kafka Connect 2.6.0版本才新增的API- 如果你使用的JDBC Sink Connector版本≥1.8.0,它会依赖这个方法,但你的Kafka Connect运行时版本低于2.6.0,就会出现找不到方法的报错
- 全量快照正常是因为该阶段未触发JDBC Sink中调用
originalRecord()的逻辑,而增量同步阶段的记录处理会触发这个调用,导致失败
解决方案
1. 检查版本匹配关系
先确认两个关键组件的版本:
- 查看Kafka Connect运行时版本:
./bin/kafka-connect-version.sh - 查看已安装的JDBC Sink Connector版本:
curl -X GET http://<connect-host>:<port>/connector-plugins | grep -i jdbc
2. 调整版本适配
根据检查结果二选一操作:
若Kafka Connect版本 < 2.6.0
卸载现有高版本JDBC Sink,降级到1.7.0或更早版本(这些版本不依赖originalRecord()方法):
# 删除插件目录下的JDBC Sink相关jar包 rm -rf <connect-plugin-dir>/kafka-connect-jdbc-*.jar # 下载1.7.0版本jar包 curl -O https://packages.confluent.io/maven/io/confluent/kafka-connect-jdbc/1.7.0/kafka-connect-jdbc-1.7.0.jar # 将jar包放入Connect插件目录,重启Connect服务
若Kafka Connect版本 ≥ 2.6.0
确保JDBC Sink Connector版本≥1.8.0,若当前版本过低则升级到兼容版本(建议和Confluent Platform或Kafka版本匹配的官方推荐版本):
# 删除旧版本jar包 rm -rf <connect-plugin-dir>/kafka-connect-jdbc-*.jar # 下载对应兼容版本(以2.0.0为例) curl -O https://packages.confluent.io/maven/io/confluent/kafka-connect-jdbc/2.0.0/kafka-connect-jdbc-2.0.0.jar # 将jar包放入插件目录,重启Connect服务
3. 验证修复效果
- 重启Kafka Connect服务后,重新启动Debezium CDC和JDBC Sink任务
- 在源MySQL中触发增量变更(插入/更新一条数据),检查Sink任务日志是否不再抛出
NoSuchMethodError,目标库是否成功同步增量数据
额外注意事项
- Debezium Connector版本也需和Kafka Connect版本兼容,建议遵循官方版本矩阵(比如Debezium 1.9.x对应Kafka 2.8.x,Debezium 2.0.x对应Kafka 3.0.x)
- 若使用Confluent Platform,优先保持所有组件版本统一,避免跨版本兼容问题
内容的提问来源于stack exchange,提问作者Hariharan Hari
相关产品推荐
相关产品推荐

