使用mongo-kafka作为接收器连接器,如何将主题记录的value字段映射到另一个值?

时间:2019-10-14 20:00:51

标签: mongodb apache-kafka-connect mongodb-kafka-connector

我是Kafka Connect和MongoDB的新手。我在Kafka主题中有一条记录,值为{ "Id": "foo" },并且希望将Id映射为BAR并将其作为文档存储在mongo的集合中。预期结果为{ "BAR": "foo" }。我应该尝试什么,或者如何配置才能做到这一点?

我将其用作参考:https://github.com/mongodb/mongo-kafka/blob/master/docs/sink.md

我尝试添加 "field.renamer.mapping": "[{\"oldName\":\"Id\", \"newName\": \"BAR\"}]""field.renamer.mapping": "[{\"oldName\":\"value.Id\", \"newName\": \"BAR\"}]"至类似于此处的mongo接收器创建的配置:https://github.com/mongodb/mongo-kafka/blob/11bac7636f0d6b0e3313c84445777253d36c2042/docker/run.sh#L108。 该请求顺利进行,在mongodb中创建了记录,但未按预期进行映射。

1 个答案:

答案 0 :(得分:1)

您应该能够使用单一消息转换(https://www.confluent.io/blog/simplest-useful-kafka-connect-data-pipeline-world-thereabouts-part-3/),尤其是ReplaceField转换。您可以将其添加到连接器配置中:

let contents = `
{ test1:function(){}
  'test2' : function(){}
  "tes-t2": function(){}
  "teè#//st2"   : function(){}
}
`
console.log(contents.match(/([^'"\s]+)(?=['"]?\s*:\s*function\()/g))