Kafka Connect Oracle CDC能否按主题自定义Schema命名?
问题描述
用Kafka Connect的Oracle CDC源连接器给数据库表做CDC同步时,每个表自动生成的Avro Schema里,名称和命名空间全是默认值:
{ "name": "ConnectDefault", "namespace": "io.confluent.connect.avro", "type": "record" }
想自定义这些Schema的名称和命名空间,但试了下面这些配置都没效果:
"value.converter.schema.name.strategy": "io.confluent.kafka.serializers.subject.TopicNameStrategy", "value.converter.schema.registry.subject": "my.namespace.myname", "transforms":"AddNamespace", "transforms.AddNamespace.type":"org.apache.kafka.connect.transforms.SetSchemaMetadata$Value", "transforms.AddNamespace.timestamp.record.namespace":"example", ...
解决方案
Oracle CDC源连接器底层基于Debezium实现,得用Debezium专属的Schema命名配置,你之前试的通用参数不对路:
自定义命名空间
用schema.name.adapter系列配置,开启数据库schema和表名的复用:"schema.name.adapter": "io.debezium.relational.history.SchemaNameAdapter", "schema.name.adapter.database.schema": "true", "schema.name.adapter.table.name": "true"这样生成的命名空间会带上数据库schema和表名,比如
your_db_schema.your_table,不会再用默认的io.confluent.connect.avro。自定义Schema名称
要替换默认的ConnectDefault,可以用Debezium的主题Schema命名策略配置:"topic.schema.name.strategy": "io.debezium.schema.TopicSchemaNameStrategy", "topic.schema.name.strategy.schema": "true", "topic.schema.name.strategy.table": "true"配置后Schema名称会包含表名等标识,不会全是
ConnectDefault。额外说明
你之前用的value.converter.schema.name.strategy是管Schema Registry里主题名称的,不是Schema本身的name和namespace;还有SetSchemaMetadataTransform参数写错了,应该是record.namespace,但就算改对,Oracle CDC源连接器也可能会覆盖这个设置,所以优先用连接器专属的配置才靠谱。
内容的提问来源于stack exchange,提问作者codependent
相关产品推荐
相关产品推荐

