使用Debezium mongodb CDC和Avro序列化创建的模式过多

时间:2019-02-18 14:06:32

标签: apache-kafka-connect confluent-schema-registry debezium

我正在使用Debezium mongodb连接器在mongo中流式传输30GB集合中的更改。

这是我的配置:

"config": {
    "connector.class" : "io.debezium.connector.mongodb.MongoDbConnector",
    "tasks.max" : "1",
    "mongodb.hosts" : "",
    "mongodb.name" : "",
    "mongodb.user" : "",
    "mongodb.password" : "",
    "database.whitelist" : "mydb",
    "collection.whitelist" : "mydb.activity",
    "database.history.kafka.bootstrap.servers" : "kafka:9092",
    "transforms": "unwrap",
    "transforms.unwrap.type" : "io.debezium.connector.mongodb.transforms.UnwrapFromMongoDbEnvelope",
    "key.converter" : "io.confluent.connect.avro.AvroConverter",
    "key.converter.schema.registry.url" : "http://schema-registry:8081",
    "value.converter" : "io.confluent.connect.avro.AvroConverter",
    "value.converter.schema.registry.url" : "http://schema-registry:8081",
    "internal.key.converter" : "org.apache.kafka.connect.json.JsonConverter",
    "internal.value.converter"  : "org.apache.kafka.connect.json.JsonConverter",
    "schema.compatibility" : "NONE"
}

起初,我有一个“为主题创建的模式太多”,所以我添加了

"value.converter.max.schemas.per.subject" : "100000"

现在,在schema-registry中为主题值创建了许多schema之后,kafka-connect的速度大大降低。

我在kafka-streams应用程序中使用此主题,因此无法将SMT移至接收器(没有接收器连接器)

模式在收集项目之间进行了更改,但更改不超过500次,并且还向后兼容,因此我不明白为什么要创建这么多模式。

任何建议都会有所帮助

1 个答案:

答案 0 :(得分:0)

我最终写了一个SMT,将模式保留在缓存中,以实现2个目标:  1.保持字段顺序。  2.在每个记录模式中,所有字段均为可选。

这样,架构便会不断发展,直到包含字段的所有选项为止,然后除非添加新字段,否则不会再更改。