PostgreSQL × Debezium × Kafka CDC(Change Data Capture)监控体系

生产级的全链路 CDC(Change Data Capture)监控体系,涵盖:

  • Debezium 端

  • Kafka 端

  • PostgreSQL 端

  • 下游消费端

  • 运行时参数

  • 容量压力

  • 延迟链路


🧭 CDC 全链路必监控指标

CDC 管道一般分为:

复制代码
PostgreSQL → WAL → Debezium Connector → Kafka → 下游消费者

因此监控分成 5 大类:


1️⃣ 数据库端(PostgreSQL)监控

CDC 的根源在数据库,因此 PG 的监控非常关键。

🔸 必须监控的 PostgreSQL 指标:

指标 意义 原因
WAL 生成速率(bytes/sec) 单位时间产生日志量 WAL 激增会导致 Debezium backlog
WAL 段积压(Replication Slot Lag) Debezium 未用完的 WAL 字节数 最重要指标之一,表示 Debezium 是否追上数据库
PG Replication Slot count CDC slot 是否快满 超过 max_slot 会导致数据库阻塞
WAL 文件堆积 是否无限增长(败坏磁盘) Debezium 延迟会导致 WAL 无法被回收
Checkpoint 延迟 PG 性能波动 Checkpoint 慢会造成 WAL 雪崩式增长
数据库负载(CPU/IO) 性能瓶颈 会影响 WAL 写入速度与 Debezium 延迟
长事务 WAL 日志无法被 truncate 长事务是 CDC 的天敌,会撑爆磁盘

推荐 Prometheus exporter

  • postgres_exporter

  • pg_stat_replication(用于 WAL slot lag)


2️⃣ Debezium Connector 端监控

这是 CDC 的核心环节。

🔸 Debezium 必监控指标:

指标 含义/为何重要
CDC 延迟(DB → Debezium) 你的上一条回答:payload.ts_ms - payload.source.ts_ms
WAL 位点滞后(LSN Lag) Debezium 与数据库进度的真实距离
Debezium Lag in Millis Debezium 暴露的标准 lag 指标
Connector Task 状态 任务是否停止、fail、重启
Error Count / Exception Rate 是否发生解析错误或任务崩溃
Queue size / Buffer usage Debezium 内部队列满了会阻塞 CDC
Heartbeat 成功率 判断 pipeline 是否卡死
重启次数 严重不稳定信号
事务大小(batch size) 大事务会卡 Debezium pipeline 秒级甚至分钟

Debezium 自带指标(JMX):

  • debezium.source.stats.*

  • debezium.task.queueRemainingCapacity

  • debezium.task.lastProcessingDurationMs


3️⃣ Kafka 端监控(CDC 的最后一公里)

Kafka 的性能直接影响整个 CDC 延迟。

🔸 必监控 Kafka 指标

指标 为什么要监控
Topic 写入延迟(broker side) Kafka 负载高会导致 CDC 暂停/堆积
Broker 消息堆积(Lag) 表示 Debezium 正在 block
ISR 同步状态 若 ISR 不健康,会影响 Kafka 写速度
Topic 大小 / 分区数量 是否需要扩容
Consumer Group Lag(下游) 下游消费压力与延迟来源
Broker CPU / I/O / 磁盘使用率 Kafka 慢会导致 CDC 延迟雪崩

推荐 exporter:

  • kafka_exporter / burrow

  • prometheus-kafka-adapter(若使用)


4️⃣ 下游消费者端监控(Sink 端)

Debezium 把消息推到 Kafka 后,下游消费速度是否匹配也非常关键。

下游必须监控:

指标 说明
Consumer Lag 下游是否落后
处理速度 TPS 下游消费能力
消费错误率 / 重试次数 下游逻辑错误不会影响 Debezium,但会产生延迟
Sink 写入延迟(ES / MySQL / Redis ...) 例如写目标库失败导致慢消费
是否出现阻塞批次(slow batch) 大表大事务会导致反压

5️⃣ 全链路延迟监控(最重要的部分)

你可以通过 Debezium 事件中的三个时间字段构建:

1. DB → Debezium 延迟

复制代码
cdc_delay_ms = payload.ts_ms - payload.source.ts_ms

表示 Debezium 是否追上数据库 WAL。


2. Debezium → Kafka 延迟

复制代码
kafka_delay_ms = kafka_timestamp - payload.ts_ms

Kafka timestamp 即 Kafka 内部写入时间。


3. DB → Kafka 总链路延迟

复制代码
end_to_end_delay_ms = kafka_timestamp - payload.source.ts_ms

用于 SLA 和全链路性能监控。


6️⃣ CDC 健康度监控(稳定性维度)

推荐监控:

指标 意义
Debezium 是否卡死(Heartbeat 失败) 无心跳表示 connector 无响应
Connector Task 是否 Unassigned 配置、权限、网络问题
Schema Registry 错误 schema 注册失败导致 CDC 中断(如 Kafka Connect + Schema 注册)
Restart Loop(重启风暴) 配置错误、低内存、JVM OOM

7️⃣ 数据质量监控(Data Quality)

CDC 的最终目的是保证"数据一致",所以你还可以加:

项目 意义
是否发生乱序事件(out of order) 大事务可能导致乱序
是否丢事件(most critical) 若下游数量与源库不一致需报警
Schema 演变失败监控 表结构改变时需要特别关注

多数公司都会在 CDC 管道外加一个 一致性校验服务 来比对源库 vs 目标库。


8️⃣ 资源监控(Host / JVM / Container)

包括:

  • CPU

  • 内存

  • GC 时间

  • JVM Heap 使用率

  • 线程数

  • 网络带宽

  • I/O 延迟

连接器本质上是一个 JVM 进程,非常依赖:

✔ GC 性能

✔ 线程池

✔ 内存大小

容易因为 GC 过长导致任务卡死或延迟猛涨。


🧱 最终总结:CDC 监控的 5 大关键能力

类别 核心目标
数据库端监控 保证 WAL 能持续生成并被回收
Debezium 端监控 保证 connector 不落后、不卡死
Kafka 端监控 保证消息能被及时写入 Kafka
下游消费监控 保证数据不堆积、不丢失
全链路延迟监控 识别延迟是来源于 DB、Debezium、Kafka 或下游

相关推荐
虚无境1 天前
如何编写一个SpringBoot项目告警推送的Starter
java·prometheus·webhook
秉承初心2 天前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
IvorySQL2 天前
PostgreSQL 技术日报 (6月15日)|PG19 性能优化推进,POSETTE 大会倒计时 2 天
数据库·人工智能·postgresql·开源
睡不醒男孩0308232 天前
云原生运维实战:高并发架构下的云原生可观测性、韧性降级与自动化干预体系
数据库·kubernetes·高并发·prometheus·devops·sre·缓存调优
whaledown2 天前
Kafka 与 Java 消息队列入门:用订单场景理解核心机制
java·kafka·消息队列·springboot
guslegend2 天前
第1章:初始Kafka
分布式·kafka
Devin~Y2 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
IvorySQL2 天前
PostgreSQL 技术日报 (6月16日)|Neon 自动化再进一步,逻辑复制冲突日志迎来 v50 更新
数据库·postgresql·自动化
倒流时光三十年2 天前
PostgreSQL 聊一下索引和排序规则
postgresql
qq_349447953 天前
Zabbix自助发现监控机器配置
zabbix