Debezium PostgresConnector如何为无数据表提前实例化topic获取AVRO schema
问题解决方法
你可以通过以下两种方案实现空表场景下提前创建Topic、注册AVRO Schema:
方案1:配置Debezium仅快照表结构(推荐)
Debezium提供了专门的快照模式,不需要同步任何数据即可完成所有表的schema拉取、Topic创建和Schema Registry注册,操作如下:
- 在你的连接器配置中新增
snapshot.mode参数,值设为schema_only,修改后的配置参考:
{ "name": "postgres-source", "config": { "connector.class":"io.debezium.connector.postgresql.PostgresConnector", "tasks.max":"1", "database.hostname": "postgres-source", "database.port": "5432", "database.user": "postgres", "database.password": "postgres", "database.dbname" : "postgres", "database.server.name": "postgres", "database.history.kafka.bootstrap.servers": "kafka:9092", "database.history.kafka.topic": "schema-changes.customers", "key.converter": "org.apache.kafka.connect.storage.StringConverter", "value.converter": "io.confluent.connect.avro.AvroConverter", "key.converter.schemas.enable": "false", "value.converter.schemas.enable": "true", "value.converter.schema.registry.url": "http://schema-registry:8081", "transforms": "unwrap", "transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState", "snapshot.mode": "schema_only" } }
- 如果之前已经启动过该连接器,需要先清除该连接器的偏移量信息:默认Kafka Connect的偏移量存储在
connect-offsetsTopic中,删除对应连接器的偏移量记录后重启连接器即可。 - 若后续需要新增接入表,可额外添加配置
"snapshot.new.tables": "always",新增表后连接器会自动对新表做schema快照,无需等待数据写入。
方案2:手动触发无变更DDL事件
如果不希望修改连接器的快照模式,可以对空表执行一次无实际业务影响的DDL操作,Debezium捕获到DDL事件后会自动创建对应Topic、注册Schema,示例操作:
-- 对指定空表执行无实际变更的DDL ALTER TABLE 你的表名 ADD COLUMN temp_dummy_col INT, DROP COLUMN temp_dummy_col;
验证
连接器重启/DDL执行完成后,你可以直接执行你提到的Maven命令下载Schema:
mvn schema-registry:download
内容的提问来源于stack exchange,提问作者Marcel kobain
相关产品推荐
相关产品推荐

