第 8 章 PostgreSQL 的 Debezium 连接器
Debezium PostgreSQL 连接器捕获 PostgreSQL 数据库模式中的行级更改。有关与连接器兼容的 PostgreSQL 版本的详情,请参考 Debezium 支持的配置页面。
第一次连接到 PostgreSQL 服务器或集群时,连接器会获取所有模式的一致性快照。完成该快照后,连接器会持续捕获插入、更新和删除数据库内容以及提交到 PostgreSQL 数据库的行级更改。连接器生成数据更改事件记录,并将其流传输到 Kafka 主题。对于每个表,默认行为是连接器所有生成的事件都流传输到该表的独立 Kafka 主题。应用程序和服务会消耗来自该主题的数据更改事件记录。
使用 Debezium PostgreSQL 连接器的信息和步骤进行组织,如下所示:
- 第 8.1 节 “Debezium PostgreSQL 连接器概述”
- 第 8.2 节 “Debezium PostgreSQL 连接器的工作方式”
- 第 8.3 节 “Debezium PostgreSQL 连接器数据更改事件的描述”
- 第 8.4 节 “Debezium PostgreSQL 连接器如何映射数据类型”
- 第 8.5 节 “设置 PostgreSQL 以运行 Debezium 连接器”
- 第 8.6 节 “部署 Debezium PostgreSQL 连接器”
- 第 8.7 节 “监控 Debezium PostgreSQL 连接器性能”
- 第 8.8 节 “Debezium PostgreSQL 连接器如何处理错误和问题”
8.1. Debezium PostgreSQL 连接器概述
PostgreSQL 的逻辑解码 功能是在版本 9.4 中引入的。它是一个允许提取提交至事务日志的更改的机制,并通过 输出插件 帮助以用户友好的方式处理这些更改。output 插件可让客户端使用更改。
PostgreSQL 连接器包含两个主要部分,它们协同工作来读取和处理数据库更改:
连接器会为捕获的每行级别的插入、更新和删除操作生成更改事件,并在单独的 Kafka 主题中为每个表发送更改事件记录。客户端应用程序读取与感兴趣的数据库表对应的 Kafka 主题,并可响应它们从这些主题接收的每行级别的事件。
PostgreSQL 通常会在一段时间后清除 write-ahead 日志(WAL)片段。这意味着连接器没有对数据库进行的所有更改的完整历史记录。因此,当 PostgreSQL 连接器首先连接到特定的 PostgreSQL 数据库时,它首先对每个数据库模式执行 一致的快照。连接器完成快照后,它会从执行快照的确切点继续流出更改。这样,连接器会以所有数据的一致性视图开始,且不会省略在快照被生成时所做的任何更改。
连接器可以接受故障。当连接器读取更改并生成事件时,它会记录每个事件的 WAL 位置。如果连接器因任何原因(包括通信故障、网络问题或崩溃)停止,在重启连接器时,在重启连接器会继续读取最后一次关闭的 WAL。这包括快照。如果连接器在快照期间停止,连接器会在重启时启动新快照。
连接器依赖于并反映 PostgreSQL 逻辑解码功能,其有以下限制:
- 逻辑解码不支持 DDL 更改。这意味着连接器无法将 DDL 更改事件报告回消费者。
-
逻辑解码复制插槽只支持在
主服务器中
。当有 PostgreSQL 服务器集群时,连接器只能在活跃的主服务器中
运行。它无法在热
或温
待机副本上运行。如果主服务器
失败或被降级,连接器会停止。主服务器
恢复后,您可以重启连接器。如果不同的 PostgreSQL 服务器已提升到主
,请在重启连接器前调整连接器配置。
出错时的行为 描述了连接器在出现问题时如何响应。
Debezium 目前仅支持使用 UTF-8 字符编码的数据库。使用单字节字符编码时,无法正确处理包含扩展 ASCII 代码字符的字符串。