使用Kafka Connect同步MySQL时遇BIGINT数据范围异常求助
错误信息
org.apache.kafka.connect.errors.DataException: com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: '13645356371071579777' in column '1' is outside valid range for the datatype BIGINT.
问题原因
你的student表中id字段定义为bigint(20) unsigned,但Kafka Connect JDBC源连接器默认将无符号大整数解析为有符号BIGINT类型。有符号BIGINT的最大值为9223372036854775807,而你的ID值13645356371071579777远超出这个范围,因此触发范围错误。
解决方案
方案1:配置连接器适配无符号类型
在JDBC源连接器配置中添加numeric.mapping=best_fit,该参数会让连接器自动匹配数据库字段到最合适的Kafka Connect数据类型,对无符号大整数使用无符号的INT64表示,避免溢出。
修改后的完整配置:
name=source-student-table connector.class=io.confluent.connect.jdbc.JdbcSourceConnector connection.url=jdbc:mysql://hostname/schema_name dialect.name=MySqlDatabaseDialect connection.user=user connection.password=password topic.prefix=student query=SELECT id, created_at, updated_at, uuid FROM student mode=timestamp+incrementing timestamp.column.name=updated_at incrementing.column.name=id tasks.max=1 numeric.mapping=best_fit
方案2:调整数据库字段类型(可选)
如果业务允许,可将id字段改为signed bigint(20),但需确保现有及未来数据不会超过有符号BIGINT的最大值9223372036854775807。此方案不适用于已存在超范围数据的场景。
方案3:查询时转换为字符串
修改query配置,将无符号ID转换为字符串类型,绕过数值范围限制:
query=SELECT CAST(id AS CHAR) AS id, created_at, updated_at, uuid FROM student
注意:下游写入目标MySQL时,需确保目标表的id字段能兼容字符串输入,或可自动转换为对应数值类型。
内容的提问来源于stack exchange,提问作者Elbo Shindi Pangestu

