Mongodb 从数组到卡夫卡主题的值
我使用Kafka Connect和Mongo作为源代码。在我的例子中,我需要一行发送给消费者数据。例如,我有这样的收藏:Mongodb 从数组到卡夫卡主题的值,mongodb,apache-kafka,apache-kafka-connect,Mongodb,Apache Kafka,Apache Kafka Connect,我使用Kafka Connect和Mongo作为源代码。在我的例子中,我需要一行发送给消费者数据。例如,我有这样的收藏: { "_id" : "sdasd", "client_id" : "11", "device_id" : "11aa11", "contacts" : [ { &q
{
"_id" : "sdasd",
"client_id" : "11",
"device_id" : "11aa11",
"contacts" : [
{
"contact_id" : "1",
"contact_name" : "FirstName LastName",
"contact_numbers" : [
{
"contact_num" : "+4912222222",
}
]
},
{
"contact_id" : "2",
"contact_name" : "FirstName2 LastName2",
"contact_numbers" : [
{
"contact_num" : "+4911111111",
}
]
}
]
}
我将连接器配置为
curl -X POST -H "Content-Type: application/json" --data '
{"name": "mongo-source-contacts",
"config": {
"tasks.max":"1",
"connector.class":"com.mongodb.kafka.connect.MongoSourceConnector",
"output.format.value":"schema",
"output.schema.value":"{\"name\":\"MongoExchangeSchema\",\"type\":\"record\",\"namespace\":\"com.mongoexchange.avro\",\"fields\":[{\"name\": \"client_id\",\"type\": \"string\"},{\"name\": \"device_id\",\"type\": \"string\"}, {\"name\": \"contacts.contact_name\",\"type\": \"string\"}]}",
"schema.compatibility": "NONE",
"key.converter":"org.apache.kafka.connect.storage.StringConverter",
"value.converter":"io.confluent.connect.avro.AvroConverter",
"value.converter.schema.registry.url":"http://localhost:8081",
"connection.uri":"mongodb://localhost:27017/replicaSet=globaldb",
"publish.full.document.only": true,
"topic.prefix":"t_cb",
"topic.creation.default.partitions" : 4,
"topic.creation.default.replication.factor": 1,
"database":"testdb",
"collection":"contactbook_test"
}}' http://localhost:8083/connectors -w "\n"
在output.schema.value中,我读取所需的字段。是否可以将主题中的数据作为每个键的记录获取?例如,此字段的值:
11 11aa11 FirstName LastName+491222222
但现在我明白了
客户端id、设备id和带有联系人的阵列。谢谢大家的关注 我不确定我是否理解这个问题。您有一条记录
“\u id”
。Mongo连接器不会解析更多内容来“深入”特定字段,更不用说只获取数组中的键/值了。也就是说,您的输出值模式应该与集合匹配,并包含数组类型。值得指出的是,点在Avro字段名称中无效
如果您想将数组展平为多个联系人对象,自己使用连接数据,并使用Kafka Streams(例如)将数据写入另一个主题我的问题是,每个联系人id条目是否可以使用客户端id和设备id单独写入一行?您说的“单独行”是什么意思?如果你是指单独的记录,那么不,你需要一个辅助进程将该数组拉入单独的对象中,这就是我想知道的。谢谢!