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

Kafka Connect迁移SQL Server数据时时间戳转Epoch毫秒问题咨询

解决SQL Server同步Kafka时日期自动转Epoch毫秒问题

核心原因说明

你之前配置TimestampConverter SMT不生效,大概率是漏了两处关键配置:一是Debezium SQL Server连接器默认会直接把日期时间字段输出为Long型的Epoch毫秒值,输入到SMT的字段已经不是时间类型,导致SMT匹配不到;二是JSON转换器默认会把Connect的时间类型转为Epoch值,就算SMT转换成功也会被二次转换。

完整配置方案

1. 调整连接器时间精度配置

首先在SQL Server连接器配置中添加如下参数,让连接器输出标准的Connect时间类型而非直接转Long:

time.precision.mode=connect

2. 配置正确的TimestampConverter SMT

按照你的格式需求配置SMT,示例配置如下:

transforms=timestampConverter
# 如果要处理消息Key中的时间字段,把下方的$Value改成$Key
transforms.timestampConverter.type=org.apache.kafka.connect.transforms.TimestampConverter$Value
transforms.timestampConverter.target.type=string
# 自定义时间格式,可按需求调整
transforms.timestampConverter.format=yyyy-MM-dd HH:mm:ss.SSS
# 如需仅转换指定字段,添加下方配置,值为你的日期时间字段名,不配置则全局处理所有时间类型
# transforms.timestampConverter.field=create_time

3. 调整JSON转换器配置

禁用JSON转换器默认的时间转Epoch逻辑,配置如下:

value.converter=org.apache.kafka.connect.json.JsonConverter
value.converter.schemas.enable=false
value.converter.write.dates.as.iso8601=true
value.converter.write.timestamps.as.iso8601=true
value.converter.write.datetimes.as.iso8601=true
# 如Key中也存在日期时间字段,同步添加Key转换器的对应配置
key.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=false
key.converter.write.dates.as.iso8601=true
key.converter.write.timestamps.as.iso8601=true
key.converter.write.datetimes.as.iso8601=true

注意事项

  • SMT的配置顺序要放在其他字段转换逻辑之前,避免字段类型被提前修改导致匹配失败
  • 重启连接器后生效,可先测试单条数据验证输出格式是否符合预期

内容的提问来源于stack exchange,提问作者CoderClown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:36:02