第 7 章 PostgreSQL 的 Debezium 连接器
Debezium PostgreSQL 连接器捕获 PostgreSQL 数据库的架构中的行级更改。有关与连接器兼容的 PostgreSQL 版本的详情,请参考 Debezium 支持的配置页面。
第一次连接到 PostgreSQL 服务器或集群时,连接器会获取所有模式的一致性快照。完成该快照后,连接器会持续捕获插入、更新和删除数据库内容并提交到 PostgreSQL 数据库的行级更改。连接器生成数据更改事件记录,并将其流传输到 Kafka 主题。对于每个表,默认行为是连接器将所有生成的事件流传输到那个表的独立 Kafka 主题。应用程序和服务消耗该主题中的数据更改事件记录。
使用 Debezium PostgreSQL 连接器的信息和流程进行组织,如下所示:
- 第 7.1 节 “Debezium PostgreSQL 连接器概述”
- 第 7.2 节 “Debezium PostgreSQL 连接器的工作方式”
- 第 7.3 节 “Debezium PostgreSQL 连接器数据更改事件的描述”
- 第 7.4 节 “Debezium PostgreSQL 连接器如何映射数据类型”
- 第 7.5 节 “设置 PostgreSQL 以运行 Debezium 连接器”
- 第 7.6 节 “部署 Debezium PostgreSQL 连接器”
- 第 7.7 节 “监控 Debezium PostgreSQL 连接器性能”
- 第 7.8 节 “Debezium PostgreSQL 连接器如何处理错误和问题”
7.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 代码字符的字符串。