Kafka Connect配置TimestampConverter报错 1.4.3版本缺失类问题
问题根因
这个报错和插件缺失类没有关系,两个认知偏差导致你误判了问题:
- 配置类名写错:
org.apache.kafka.connect.transforms.TimestampConverter本身是抽象类,设计上就不允许直接实例化。它的具体实现是两个静态内部类:专门处理消息Value字段的TimestampConverter$Value、专门处理消息Key字段的TimestampConverter$Key,你在SMT配置里直接填了抽象类的全限定名,Kafka Connect无法创建转换实例,抛出的报错里其实已经明确给出了可选的正确类名。 - 找类的位置错了:从Apache Kafka 2.0版本开始,
TimestampConverter转换就已经从独立的confluentinc/connect-transforms插件中移除,合并为Kafka Connect核心运行时自带的内置SMT,你下载的1.4.3版本connect-transforms包本来就不包含这个类,不是包损坏或者版本缺失,是组件的归属调整了,不需要额外安装插件就能直接调用这个转换。
修复方案
按以下步骤调整配置即可,不需要修改插件包内容:
- 修正SMT的类型配置,根据你要转换的字段所在位置选择正确的实现类:
如果待转换的Unix时间戳字段在消息Value中,配置为:
如果待转换的Unix时间戳字段在消息Key中,配置为:transforms.ttl.type=org.apache.kafka.connect.transforms.TimestampConverter$Valuetransforms.ttl.type=org.apache.kafka.connect.transforms.TimestampConverter$Key - 补全TimestampConverter的必填配置项,针对Unix epoch时间戳转MongoDB Date类型的场景,参考配置如下(以转换Value中名为
ttl的字段为例):# 指定要转换的字段名 transforms.ttl.field=ttl # 指定转换后的目标类型为Date transforms.ttl.target.type=Date # 根据你的时间戳精度选择,毫秒级填milliseconds,秒级填seconds transforms.ttl.unix.precision=milliseconds - 配置修改完成后,重启对应的Sink任务即可生效,不需要替换connect-transforms插件版本,也不需要手动往插件目录补类文件,Kafka Connect 2.0及以上版本会自动从核心类路径加载这个转换的实现。
注意:不少过时的教程写SMT配置时会省略
$Value/$Key后缀,直接填抽象类名,这是最常见的触发该报错的原因。
内容的提问来源于stack exchange,提问作者Gianfranco A.
相关产品推荐
相关产品推荐

