Debezium与AWS RDS Postgres数据同步异常排查请求:仅初始快照同步,后续变更未捕获
排查RDS Postgres 10.18 Debezium CDC无法捕获后续变更的问题
我完全理解你现在的困扰——快照同步得好好的,但数据库的新变更就是抓不到,Kafka Connect日志还一直刷“flushing 0 outstanding messages for offset commit”,这种卡壳的情况确实让人着急。结合你提供的操作步骤和背景信息,咱们来梳理几个重点排查方向:
1. 确认RDS逻辑复制参数是否真正生效
虽然你已经修改了参数组并重启RDS,但有时候可能存在参数组未正确关联、重启未完全生效的情况:
- 登录RDS控制台,确认当前实例使用的是你修改过的参数组;
- 用超级用户执行SQL查询关键参数,确保和配置一致:
SHOW wal_level; -- 必须返回logical SHOW max_replication_slots; -- 应等于你设置的15 SHOW max_wal_senders; -- 应等于你设置的10 SHOW wal_keep_segments; -- Postgres 10用这个参数,建议值不低于64,避免WAL被过早回收
2. 检查Debezium创建的复制槽状态
Debezium依赖Postgres的复制槽来追踪WAL日志,槽异常是常见的问题根源:
- 执行SQL查询复制槽信息:
你要找的是名为SELECT slot_name, active, restart_lsn, confirmed_flush_lsn FROM pg_replication_slots;debezium_db.test的槽(对应你配置的database.server.name):- 如果槽不存在:说明Debezium未能成功创建槽,可能是权限问题(虽然你给了
rds_replication和rds_superuser,但可以手动尝试创建测试槽验证:CREATE_REPLICATION_SLOT test_slot LOGICAL pgoutput;); - 如果槽存在但
active为false:说明复制连接已断开,可能是Kafka Connect连接器异常,试试重启连接器:curl -X POST localhost:8083/connectors/db-test/restart - 如果槽存在但
restart_lsn长时间未更新:说明槽没有在消费WAL日志,可能是WAL被回收(对应上面的wal_keep_segments参数),或者publication配置有问题。
- 如果槽不存在:说明Debezium未能成功创建槽,可能是权限问题(虽然你给了
3. 验证Publication的有效性
你手动创建了dbz_publication FOR ALL TABLES,需要确认它确实包含了你要同步的表,且复制用户有权限读取:
- 查询publication包含的表:
确保所有需要同步的表都在列表中;SELECT * FROM pg_publication_tables WHERE pubname = 'dbz_publication'; - 虽然你已经给了
ALL PRIVILEGES,但可以额外给复制用户明确的SELECT权限(Postgres 10中某些权限可能需要显性授予):GRANT SELECT ON ALL TABLES IN SCHEMA public TO db_replica; GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO db_replica;
4. 调整Debezium连接器配置
试试让Debezium自动管理publication,避免手动创建的潜在冲突:
- 先删除你手动创建的publication:
DROP PUBLICATION dbz_publication;; - 修改连接器配置,去掉手动创建的步骤,Debezium会自动创建符合其要求的publication(默认名称为
dbz_publication); - 另外,Postgres 10的pgoutput插件可以尝试添加
publication.autocreate.mode: all_tables参数,确保所有表都被纳入同步范围。
5. 检查RDS CloudWatch日志
Kafka Connect日志没报错,但RDS的系统日志可能藏着线索:
- 登录AWS CloudWatch,找到对应RDS实例的日志组,搜索
replication、wal_sender、slot相关的关键词,看看有没有权限错误、WAL回收异常等信息。
6. 对比测试环境与生产环境的差异
你提到测试用的10.18实例运行正常,那重点对比:
- 参数组的所有参数(尤其是和WAL、复制相关的);
- 安全组/网络配置(虽然快照能同步,但逻辑复制的连接是否有特殊限制?);
- 数据库中表的结构差异(比如有没有包含不支持CDC的字段类型?不过快照能成功的话,这个概率较低)。
内容的提问来源于stack exchange,提问作者Nimesh
相关产品推荐
相关产品推荐

