Debezium MongoDB带Transforms连接器部署报错求助
问题定位与修复方案
看你的报错栈根因 org.apache.avro.SchemaParseException: Illegal initial character: 10019_AutoState,马上就能找到问题:Avro 要求 Schema 名称不能以数字开头,但你的 MongoDB 集合名 10019_AutoState 刚好踩了这个坑。
你其实已经想到用名称清理的转换了——配置了 transforms.sanitize.field.names: true,但这个配置根本没生效!因为你在 transforms 列表里只写了 unwrap,没把 sanitize 这个转换加进去,Debezium 根本不会执行这个名称清理逻辑。
修正后的完整连接器配置
把 sanitize 加入转换列表,并补全必要的转换类型配置,就能解决问题:
{ "name": "mongo_source_connector_autostate", "config": { "connector.class": "io.debezium.connector.mongodb.MongoDbConnector", "tasks.max": 1, "initial.sync.max.threads": 4, "mongodb.hosts": "rs0/FE0VMC1980:27017", "mongodb.name": "mongo", "collection.whitelist": "DASMongoDB.*_AutoState", "transforms": "unwrap,sanitize", "transforms.unwrap.type": "io.debezium.connector.mongodb.transforms.UnwrapFromMongoDbEnvelope", "transforms.sanitize.type": "io.debezium.transforms.SanitizeFieldNames", "transforms.sanitize.field.names": true, "transforms.sanitize.schema.names": true } }
关键修改点解释
transforms字段必须包含所有你要启用的转换,多个转换用逗号分隔(这里先执行unwrap再做sanitize顺序合理)- 必须指定
transforms.sanitize.type为io.debezium.transforms.SanitizeFieldNames,否则 Debezium 不知道该用哪个转换类来处理名称 - 新增
transforms.sanitize.schema.names: true是核心——它会把不符合 Avro 规范的 Schema 名称(比如以数字开头的集合名)自动调整为合法格式(比如把10019_AutoState改成_10019_AutoState)
这样修改后,连接器就能正常生成符合 Avro 规范的 Schema,不会再抛出解析错误了。
内容的提问来源于stack exchange,提问作者Nil
相关产品推荐
相关产品推荐

