Debezium Postgres源连接器心跳事件正常但数据库心跳表未更新
以下是针对该问题的排查和解决建议:
- 确认数据库账号权限:Debezium配置使用的postgres账号需要拥有
inventoryschema下heartbeat表的INSERT、UPDATE权限,可手动使用该账号执行配置中的心跳SQL语句验证是否能正常执行成功。 - 补全心跳SQL的表全限定名:你当前配置的心跳SQL没有指定schema,若数据库的默认schema搜索路径不包含
inventory,会导致语句执行时找不到表,建议将heartbeat.action.query修改为:
INSERT INTO inventory.heartbeat (id, ts) VALUES (1, NOW()) ON CONFLICT(id) DO UPDATE SET ts=EXCLUDED.ts;
- 验证心跳表结构:确认
inventory.heartbeat表的id字段设置了主键或者唯一约束,否则ON CONFLICT逻辑不会触发,会导致每次执行SQL都新增行而非更新已有行,可执行SELECT * FROM inventory.heartbeat;查看是否有新数据持续写入。 - 检查publication配置:你使用了
publication.autocreate.mode=filtered,需确认Postgres端的Debezium对应publication已经包含heartbeat表,可在Postgres中执行以下语句验证:
SELECT * FROM pg_publication_tables WHERE pubname = 'debezium';
如果未包含,可手动将表加入publication,或者重新创建连接器触发publication自动更新。
- 查看连接器运行日志:将Debezium连接器的日志级别调整为DEBUG,搜索关键词
heartbeat、action query,可直接定位到心跳SQL执行时的具体报错信息(如表不存在、权限不足、语法错误等)。
*注:基础心跳事件写入Kafka仅代表心跳触发逻辑正常,不代表heartbeat.action.query执行成功,二者是独立流程,执行异常会在日志中打印错误,不会影响基础心跳事件的生成。
内容的提问来源于stack exchange,提问作者javaguru
相关产品推荐
相关产品推荐

