使用带有 Avro 序列化的 Debezium mongodb CDC 创建的模式太多

Posted

技术标签:

【中文标题】使用带有 Avro 序列化的 Debezium mongodb CDC 创建的模式太多【英文标题】:Too many schemas created using Debezium mongodb CDC with Avro serializing 【发布时间】:2019-07-11 22:36:54 【问题描述】:

我正在使用 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"

现在,在模式注册表中为主题值创建了许多模式后,kafka-connect 的速度急剧下降。

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

架构在集合项之间更改但不超过 500 次,并且还向后兼容,所以我不明白为什么要创建这么多架构。

任何建议都会有所帮助

【问题讨论】:

你尝试过使用 JSON 连接器吗? 我真的很想在这种情况下使用 avro 序列化 【参考方案1】:

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

这样,架构会不断发展,直到它包含字段的所有选项,然后除非添加新字段,否则不会再发生任何变化。

【讨论】:

嘿@Daniel Shalev。你能分享更多关于 SMT 是如何实施的吗?我有几乎相同的问题,非常感谢您的帮助。谢谢!

以上是关于使用带有 Avro 序列化的 Debezium mongodb CDC 创建的模式太多的主要内容,如果未能解决你的问题,请参考以下文章

从 Avro Debezium 数据创建基于 Avro 的 KSQL 流会生成奇怪的模式

在Avro Debezium数据上创建一个基于Avro的KSQL流,会产生奇怪的模式。

如何从 Debezium 创建的 avro 消息中获取字段?

带有 Avro 和 Schema Repo 的 Apache Kafka - 模式 ID 在消息中的啥位置?

如何使用来自 Kafka 的 Python 解码/反序列化 Avro

Debezium 可能会产生无效的模式