我使用简单的文件源阅读器
connector.class=org.apache.kafka.connect.file.FileStreamSourceConnector
tasks.max=1
文件内容是每行中的一个简单JSON对象。我发现有一种方法可以替换记录键并使用转换来完成此操作,例如
# Add the `id` field as the key using Simple Message Transformations
transforms=InsertKey
# `ValueToKey`: push an object of one of the column fields (`id`) into the key
transforms.InsertKey.type=org.apache.kafka.connect.transforms.ValueToKey
transforms.InsertKey.fields=ip
但我收到了错误
[从字段到键复制字段]仅支持Struct对象, 发现:java.lang.String
有没有办法解析字符串json并从那里获取密钥,就像我可以使用Flume和regex_extractor一样?
答案 0 :(得分:1)
在SourceConnector上使用转换时,转换是在List<SourceRecord>
返回的SourceConnector.poll()
上完成的
在您的情况下,FileStreamSourceConnector
读取文件的各行,并将每一行作为字符串放入SourceRecord
对象中。因此,当转换获取SourceRecord
时,它仅将其视为字符串,而不知道对象的结构。
要解决此问题,
FileStreamSourceConnector
代码,以使其返回SourceRecord
以及输入的json字符串的有效Struct和Schema。您可以为此使用Kafka的SchemaBuilder类。“ value.converter”:“ org.apache.kafka.connect.json.JsonConverter”
“ value.converter.schemas.enable”:“ false”
如果使用第二个选项,请不要忘记将这些配置放在SourceConnector上。
“ value.convertor”:“ org.apache.kafka.connect.storage.StringConverter”
“ value.converter.schemas.enable”:“ false”
答案 1 :(得分:0)
有一种方法可以替换记录密钥
有一个名为org.apache.kafka.connect.transforms.ReplaceField$Key
InsertKey
将获取一个值并尝试插入到Struct / Map中,但您似乎正在使用String键