云数据库 PostgreSQL 是京东智联云基于开源的 PostgreSQL构建的一款功能强大的企业级关系型数据库管理系统。加州大学计算机系开发的PostgreSQL,有“世界上可获得的最先进的开源数据库”之称,在DB-Engines关系型数据库中排名第四,以其稳定性、数据类型多样性(JSON、IP数据和几何数据等)、对地理信息引擎的完整支持等特性,逐渐成为企业级数据库首选。
云数据库PostgreSQL作为一款功能强大的企业级关系型数据库管理系统,能够提供丰富的产品相关生态,还可为用户提供数据订阅服务。用户能够根据自身业务需求自由消费增量数据,适用于缓存更新策略、业务异步解耦、异构数据源的数据实时同步和复杂ETL的数据实时同步等多个业务场景。
京东智联云“云数据库 PostgreSQL”基于Debezium服务,能够实现云数据库PostgreSQL-云Kafka增量消息订阅服务,用户无需部署服务,直接连接客户端即可自定义消费程序进行Kafka数据消费,并且可以随时停止消费。并且在重新启动客户端时,消费的数据会从中断的位置继续恢复。
看到这里,你可能会有所疑惑,云数据库PostgreSQL是京东智联云基于开源的 PostgreSQL构建的一款功能强大的企业级关系型数据库管理系统,但是Debezium服务是什么呢?Debezium服务和云数据库PostgreSQL准实时数据同步原理又是怎样的呢?本文将对如何以云数据库PostgreSQL作为数据源来实现其功能进行介绍。
Debezium服务介绍
Debezium是一组开源的分布式服务,主要用途是捕获数据库中的更改(change data capture,CDC),从而帮助应用程序对数据库的更改进行识别及响应。Debezium服务提供低延迟的针对CDC(change data capture)数据同步分布式平台,启动并指向数据库之后,可以准实时的获取数据库行级别的变更事件。同时,Debezium是构建在kafka之上的,与kafka深度耦合,可以基于kafka Connector来使用。因此能够通过Kafka和Kafka Connect来实现自己的持久性、可靠性和容错性。目前,Debezium服务支持的数据库有MySQL、PostgreSQL、SQL server、Oracle、Mongodb。
基于Debezium的CDC管道架构
众所周知,在业务系统中,会涉及到多个数据源的数据流转,例如在线系统的数据流转到分析系统、流计算系统、搜索引擎、缓存系统、事件处理系统等等。那么,实时的数据流转能力是至关重要的。为了实现这一目的,CDC系统由此出现。
CDC系统用于捕获上游数据的实时变化(已提交的数据),写入消息队列(例如Kafka)并持久化。对于下游系统,可以通过Spark Streaming消费消息队列的数据结合业务逻辑做一些ETL数据处理,或者基于HBase Connector将数据转储到HBase,从而实现实时的数据流转。
我们在物流的业务实践中,由于数据爆发性增长,从而进行了数据库拆分、分库分表。但是在拆分之后,我们又遇到了新的挑战:如何解决分库分表之后数据集中的检索问题呢?此时,Debezium服务应运而生。通过Debezium实时数据管道,将一千多张数据表准实时地同步到Kafka Topic下,再由业务端消费Topic消息摄取数据到ElasticSearch进行检索,便可以完成地址搜索应用场景的构建。
云数据库PostgreSQL增量消息同步原理
Logical Decoding
解析WAL成为逻辑数据的过程被称为Logical Decoding,是从PostgreSQL 9.4开始引入的特性。Logical Decoding是把WAL日志解析成逻辑日志的过程,将用户定阅的数据变化(即对某些表的insert/update/delete操作来带的数据变化)输出成特定的数据格式,Debezium支持Logical Decoding plugin有decoderbufs、wal2json、pgoutput(PostgreSQL 10以上版本)。
复制槽
复制槽(replication slots)是实现同步需求的重要部分,创建一个slot后,能够保存逻辑或物理流复制的基础信息,类似MySQL的位点信息。这样,Debezium通过PostgreSQL JDBC连接到PostgreSQL数据源,然后基于逻辑流复制协议,即可从replication slots获取状态信息,同步数据变更。
基于Debezium Connector摄入数据到其他数据源
Debezium Connector可以将数据库执行DML操作所产生的数据变更事件,以特定的数据格式(JSON/Avro)写入到Kafka对应的Topic下。那么对于同步的目的端来说,只要能够实现从Kafka消费的Connector,再加上一些和源数据对应的格式转换逻辑,就能够将数据同步,并持久化到不同的数据源,例如ElasticSearch、HBase等。
Kafka Connector部署模式分为两种,一种是Standalone模式,一种是Distribution模式。一般在生产模式下建议使用Distribution模式。在集群模式下,可以扩展、容错,一旦某个节点的task任务出现异常,其他正常的节点能够及时接管出现异常的task任务。
具体该如何将PostgreSQL同步数据到ElasticSearch并在Distribution模式下进行集中管理部署,请见下方的示意图。
Debezium功能特性:
- 快照支持:可选不同的模式,一个初始数据库当前状态的快照可以支持全量数据的同步。这样能够避免由于已经运行了一段时间的数据库中有些事务日志已经被丢弃,导致这部分的数据无法同步到Kafka上的情况发生。
- 过滤器:可以通过白名单/黑名单过滤器对捕获的模式、表和列集进行配置。
- 屏蔽:能够屏蔽特定列中的值,例如敏感数据。
- 监视:大多数Connector都可以使用JMX进行监视,通过Prometheus和Grafana可以有效监控Debezium Connector的运行。
- 不同的即时消息转换:例如用于消息路由、提取新记录状态。
通过上述内容,想必大家能够对Debezium服务和云数据库PostgreSQL准实时数据同步原理有了进一步的理解。目前,京东智联云云数据库 PostgreSQL已上线,云数据库 PostgreSQL 是京东智联云数据库团队历时 1 年多精心研发的产品,该产品凝聚了京东智联云数据库团队多年来的 PostgreSQL 使用经验,能够提供一个稳定、可靠的数据存储服务。
云数据库 PostgreSQL 易于部署、管理和扩展,默认支持主从热备架构,提供数据备份、故障恢复、监控等全套解决方案,彻底解决数据库运维的烦恼。同时,京东智联云“云数据库 PostgreSQL”通过使用网络隔离、白名单限制外网访问等方式,为数据库服务提供了高级别的安全性需求,帮助用户省去绝大部分复杂而繁琐的管理工作,从而使用户能够更专注于业务流程的开发与建设。
点击【阅读】快来立即体验 [云数据库 PostgreSQL]吧!