You need to enable JavaScript to run this app. Confluent 6.0.1 Kafka Connect时间戳转换写Postgres报错
优惠活动
大模型
产品
解决方案
定价
更多

Confluent 6.0.1 Kafka Connect时间戳转换写Postgres报错

问题根因定位
  • 不配置转换规则时的Postgres类型不匹配报错:你定义的Avro Schema里DATE_TIME是字符串类型,JDBC Sink会直接把这个值映射为数据库的varchar类型,和Postgres表里预设的timestamp with time zone字段类型不兼容,自然会触发校验报错。
  • 配置转换规则后的Connect阶段报错:核心问题是Transform的参数名写错了。TimestampConverter这个内置SMT里,用来指定Struct消息中待转换时间字段的合法参数是field,你写的target.field不是该SMT会识别的配置项,导致SMT没有获取到字段定位信息,默认把整条消息(Struct结构)当成要转换的时间字段做格式校验,Struct结构肯定不满足时间类型的格式要求,才会抛出“Schema does not correspond to a known timestamp type format”的错误。
正确配置修改

把原来Transform段落的配置替换成下面的内容:

# Transforms
transforms=TimestampConverter
transforms.TimestampConverter.type=org.apache.kafka.connect.transforms.TimestampConverter$Value
# 用field参数指定要转换的源字段,不要写target.field
transforms.TimestampConverter.field=DATE_TIME
transforms.TimestampConverter.format=yyyy-MM-dd HH:mm:ss
transforms.TimestampConverter.target.type=Timestamp
后续校验注意事项
  • 你使用Confluent AvroConverter做消息序列化,配置里的key.converter.schemas.enable=false、value.converter.schemas.enable=false对AvroConverter没有作用,这两个参数是JsonConverter、StringConverter的专属配置,留着不会影响运行但属于冗余配置,可以直接删掉。
  • 你用的时间格式yyyy-MM-dd HH:mm:ss没有时区信息,TimestampConverter会按照Connect Worker进程所在JVM的默认时区解析字符串值,要确保JVM时区和Postgres数据库的时区配置保持一致,避免写入的时间值出现时区偏移。
  • 完成上述调整后,SMT会把Struct里的字符串类型DATE_TIME转换为Connect Timestamp类型,JDBC Sink可以直接把这个值映射到Postgres的timestamp with time zone字段,不会再出现类型不匹配的报错。
  • 因为你的目标表是预先建好的,auto.create=false的配置是正确的,不需要调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 16:06:03