From 54eb472faac4945ae2b4127a60092bd4a7dcf753 Mon Sep 17 00:00:00 2001 From: hailin Date: Sun, 15 Feb 2026 02:44:38 -0800 Subject: [PATCH] =?UTF-8?q?fix(debezium):=20=E6=B7=BB=E5=8A=A0=20heartbeat?= =?UTF-8?q?.action.query=20=E9=98=B2=E6=AD=A2=20WAL=20=E6=97=A0=E9=99=90?= =?UTF-8?q?=E7=A7=AF=E5=8E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题根因: - 5个 Debezium outbox connector 配置了 heartbeat.interval.ms=10000 但缺少 heartbeat.action.query,导致低写入频率的数据库 (auth/contribution/mining-wallet) 无法向 PostgreSQL 回传 confirmed_flush_lsn 确认位点 - PostgreSQL 无法回收旧 WAL,磁盘占用持续增长至 293GB 修复方案 (参考 Debezium 创始人 Gunnar Morling 推荐): - 使用 pg_logical_emit_message() 代替心跳表方案 - 每10秒向 WAL 写入逻辑解码消息,绕过 publication 过滤 - 无需建表、无需改 table.include.list、无需改 publication - 不产生额外 Kafka 消息,对消费端零影响 - 要求 PostgreSQL >= 14 (当前 16.11) 影响范围: 全部5个 outbox connector 配置文件 操作方式: PUT /connectors/{name}/config 热更新,触发 task 重启 Co-Authored-By: Claude Opus 4.6 --- backend/services/scripts/debezium/auth-outbox-connector.json | 1 + .../services/scripts/debezium/contribution-outbox-connector.json | 1 + backend/services/scripts/debezium/mining-outbox-connector.json | 1 + .../scripts/debezium/mining-wallet-outbox-connector.json | 1 + backend/services/scripts/debezium/trading-outbox-connector.json | 1 + 5 files changed, 5 insertions(+) diff --git a/backend/services/scripts/debezium/auth-outbox-connector.json b/backend/services/scripts/debezium/auth-outbox-connector.json index 0fa95a94..a57d91fb 100644 --- a/backend/services/scripts/debezium/auth-outbox-connector.json +++ b/backend/services/scripts/debezium/auth-outbox-connector.json @@ -35,6 +35,7 @@ "transforms.route.replacement": "cdc.auth.outbox", "heartbeat.interval.ms": "10000", + "heartbeat.action.query": "SELECT pg_logical_emit_message(false, 'heartbeat', now()::varchar)", "snapshot.mode": "initial", diff --git a/backend/services/scripts/debezium/contribution-outbox-connector.json b/backend/services/scripts/debezium/contribution-outbox-connector.json index c154d66f..2b0c3357 100644 --- a/backend/services/scripts/debezium/contribution-outbox-connector.json +++ b/backend/services/scripts/debezium/contribution-outbox-connector.json @@ -35,6 +35,7 @@ "transforms.route.replacement": "cdc.contribution.outbox", "heartbeat.interval.ms": "10000", + "heartbeat.action.query": "SELECT pg_logical_emit_message(false, 'heartbeat', now()::varchar)", "snapshot.mode": "initial", diff --git a/backend/services/scripts/debezium/mining-outbox-connector.json b/backend/services/scripts/debezium/mining-outbox-connector.json index 20b5e502..106a2ea7 100644 --- a/backend/services/scripts/debezium/mining-outbox-connector.json +++ b/backend/services/scripts/debezium/mining-outbox-connector.json @@ -35,6 +35,7 @@ "transforms.route.replacement": "cdc.mining.outbox", "heartbeat.interval.ms": "10000", + "heartbeat.action.query": "SELECT pg_logical_emit_message(false, 'heartbeat', now()::varchar)", "snapshot.mode": "initial", diff --git a/backend/services/scripts/debezium/mining-wallet-outbox-connector.json b/backend/services/scripts/debezium/mining-wallet-outbox-connector.json index 406885d8..4bc44c64 100644 --- a/backend/services/scripts/debezium/mining-wallet-outbox-connector.json +++ b/backend/services/scripts/debezium/mining-wallet-outbox-connector.json @@ -35,6 +35,7 @@ "transforms.route.replacement": "cdc.mining-wallet.outbox", "heartbeat.interval.ms": "10000", + "heartbeat.action.query": "SELECT pg_logical_emit_message(false, 'heartbeat', now()::varchar)", "snapshot.mode": "initial", diff --git a/backend/services/scripts/debezium/trading-outbox-connector.json b/backend/services/scripts/debezium/trading-outbox-connector.json index 316ee8d7..17b80316 100644 --- a/backend/services/scripts/debezium/trading-outbox-connector.json +++ b/backend/services/scripts/debezium/trading-outbox-connector.json @@ -35,6 +35,7 @@ "transforms.route.replacement": "cdc.trading.outbox", "heartbeat.interval.ms": "10000", + "heartbeat.action.query": "SELECT pg_logical_emit_message(false, 'heartbeat', now()::varchar)", "snapshot.mode": "initial",