前言
在日常运维过程中,我们经常需要对数据进行一些同步处理,从系统 A将一个表的数据同步到系统 B。以前我们主要使用 Oracle GoldenGate,后来 MySQL逐渐增多,使用上了分布式,阿里的 otter也开始部分使用。近来我们陆续大量上了 PostgreSQL数据库,对 PG使用较多的 CDC同步工具是 debezium
,它使用 PostgreSQL逻辑解码插件,今天我们将介绍一下它的一些基本知识。
逻辑解码的概念
PostgreSQL在9.4后提供了逻辑解码功能,其基本原理是从 WAL日志解码,跟踪所有 DML (INSERT, UPDATE, DELETE)更改。之后转换成各种可用的格式,比如 Json。最终发送给外部程序进行消费(例如 ElasticSearch)。下图显示了整个流程的前半部分(解码输出):
对于逻辑解码插件,主要有以下几类。按照格式来分主要有
- JSON format plugins
- Protobuf Format Plugins
- Avro Format Plugins
- SQL Format Plugins
- Miscellaneous Plugins
具体可以参考Wiki上的Logical Decoding Plugins
尽管如此,我还是先浏览了每一个项目,发现许多项目都停止了更新。仍在更新的主要是下面的几个:
wal2json
Postgres Decoderbufs
pglogical
wal2mongo
wal2json逻辑解码测试
为了能使用逻辑解码,需要先安装wal2json插件。
[postgres@centos8 ~]$ git clone https://github.com/eulerto/wal2json.git
cd wal2json/
export PGHOME=/d