You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka Connect JDBC Source数值与时间戳显示异常问题求助

解决Confluent 3.2.2 Kafka Connect JDBC Source的数值与时间戳格式问题

我很熟悉Confluent早期版本的Kafka Connect JDBC连接器限制,你遇到的问题主要是因为3.2.2版本还不支持numeric.mapping配置,同时默认的类型序列化逻辑导致了数值和时间戳的显示不符合预期,下面给你几个可行的解决方案:

一、处理数值字段(Decimal转普通数值类型)

由于3.2.2版本的JDBC连接器没有numeric.mapping参数,我们可以通过自定义SQL查询强制转换字段类型,绕过默认的Decimal映射:

  1. 修改连接器配置,将table.name替换为query参数,在SQL中显式把Decimal类型的字段转换为整数/长整型:
name=jdbc-teradata-source-connector
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
tasks.max=1
connection.url=...
# 移除无效的numeric.maping配置
topic.prefix=test-2
mode=timestamp+incrementing
timestamp.column.name=LAST_LOGIN
incrementing.column.name=ID
# 自定义查询,强制转换数值字段类型
query=SELECT CAST(ID AS BIGINT) AS ID, CAST(TENANT_ID AS BIGINT) AS TENANT_ID, CAST(IS_ACTIVE AS SMALLINT) AS IS_ACTIVE, CREATION_DATE, LAST_LOGIN, NAME, MOBILEPHONE, EMAIL, USERNAME, PASSWORD, EXTERNAL_ID FROM your_target_table

这样连接器会将转换后的字段识别为普通的整数类型,payload中就会显示正常的数值,而不是Base64编码的Decimal字节。

  1. 如果你不想修改查询语句,也可以考虑自定义Converter(需要少量开发):
    实现一个自定义的Converter,拦截Decimal类型的字段,将Base64解码后的字节转换为对应的数值。不过这个方案复杂度更高,优先推荐SQL转换的方式。

二、处理时间戳字段(长整型转可读字符串)

时间戳显示为int64长整型是默认JsonConverter的序列化逻辑导致的,你可以通过配置Converter的时间戳格式化参数来解决:

在连接器配置中添加以下Converter相关参数:

value.converter=org.apache.kafka.connect.json.JsonConverter
value.converter.schemas.enable=true
# 指定时间戳的格式化字符串,可根据需求调整
value.converter.timestamp.format=yyyy-MM-dd'T'HH:mm:ss.SSSZ

配置后,时间戳字段会被序列化成类似2019-05-09T12:17:17.030+0800的可读字符串,而不是毫秒数。

三、额外的配置注意事项

  • 你的配置中numeric.maping存在拼写错误,正确的参数名是numeric.mapping,但3.2.2版本不支持该参数,建议直接移除。
  • 避免同时设置topic和topic.prefix,两者二选一即可,防止topic名称冲突。

内容的提问来源于stack exchange,提问作者A. Gisbert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:27:43