SphereEx-DBPlusEngine 1.5.0 功能解读:CDC

news2024/11/18 21:25:27

前一段时间,面向新一代数据架构的数据库增强引擎 SphereEx-DBPlusEngine 正式发布  1.5.0 版本,新增 CDC 和数据库防火墙两大重磅功能,本篇文章笔者就给大家详细介绍 CDC 功能的实现逻辑和技术细节。

CDC

CDC(Change Data Capture)增量数据捕捉。数据库日志(以 MySQL 为例) binlog 是 MySQL 记录变更数据的"二进制日志",它可以看做是一个消息队列,队列中按顺序保存了 MySQL 中详细的增量变更信息,通过消费队列中的变更条目,下游系统或工具实现了与 MySQL 的实时数据同步。

在实际应用中,CDC主要用于数据同步,数据备份和恢复等方面。通常情况下,CDC都应用于数据流转量较大的场景中,如大规模数据仓库、数据中心、云计算等领域。

01 概述

SphereEx-DBPlusEngine 数据库增强引擎既可以帮助数据库实现单体到分布式转换,又可以实现数据在数据库中的加密存储,进而帮助数据库提升安全性。SphereEx-DBPlusEngine 的 CDC 功能,可以实现对分布式和加密存储等场景下的数据变化的捕捉。加密场景可以通过设置加解密参数,指定明文或密文传输到指定目标,满足不同目标端对数据展现形式的需求。分布式场景支持分布式事务,可以保障源端和目标端分布式事务的一致性。

目前 SphereEx-DBPlusEngine 数据迁移插件所支持的数据库产品为 MySQL、MySQL分支版本、PostgreSQL 和 openGauss,具体版本、环境要求和权限要求如下。

数据库版本支持环境要求权限要求
1MySQL5.1.15 ~ 8.xmy.cnf 配置
log-bin=mysql-bin
binlog-format=row
binlog-row-image=full
--确认命令如下
show variables like '%log_bin%';
show variables like '%binlog%';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO ${username}@${host}
--确认命令如下
SHOW GRANTS FOR 'user';
2Aurora MySQL3.02.2my.cnf 配置
log-bin=mysql-bin
binlog-format=row
binlog-row-image=full
--确认命令如下
show variables like '%log_bin%';
show variables like '%binlog%';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO ${username}@${host}
--确认命令如下
SHOW GRANTS FOR 'user';
3PostgreSQL9.4 或以上版本postgresql.conf 配置:
wallevel = logical
max
walsenders = 10
max
replicationslots = 10
max
connections = 600
pghba.conf 配置:
host replication repl
acct 0.0.0.0/0 md5
4openGauss2.0.1 ~ 3.0.0postgresql.conf 配置:
wallevel = logical
max
walsenders = 10
max
replicationslots = 10
max
connections = 600
pghba.conf 配置:
host replication repl
acct 0.0.0.0/0 md5

架构图

图片

核心功能

全量数据采集

增量数据采集

增量数据和全量数据的衔接

支持事务

数据解密传输

故障自动切换

支持资源调度

断点续传

02 基本概念

  • CDC 进程

    • CDC(Change Data Capture)是一种数据采集技术,CDC 可以监控 SphereEx-DBPlusEngine 的存储节点中的数据变化,捕捉到数据操作事件,过滤并提取有用信息,最终将这些变化数据发送到指定的目标上。

  • 集群

    • 为了提供特定服务而集合在一起的多个节点。

  • 源端

    • 原始数据所在的集群。

  • 目标端

    • 原始数据将要迁移的目标存储集群。

  • 订阅

    • 目标端配置接收源端的变化数据。

  • 存量数据

    • 配置 CDC 功能前,存储节点中已有的数据。

  • 增量数据

    • CDC 运行过程中,业务系统所产生的新数据。

03 适用场景

CDC主要用于数据同步、数据备份和恢复等方面。通常情况下,CDC都应用于数据流转量较大的场景中,如大规模数据仓库、数据中心、云计算等。同时 CDC 支持将数据写入 Kafka,所有可以消费 Kafka 的目标端都可以作为 SphereEx-DBPlusEngine CDC 的目标端。

04 使用前提

已完成 SphereEx-DBPlusEngine 和目标端数据库环境部署,网络通畅且服务正常。

CDC 需要依赖治理中心(如 Zookeeper),需提前完成部署。

05 使用限制

目前只有 openGauss 的增量数据支持全局排序。由于其它数据库没有提供全局有序的 CSN,还无法做到。

  • 支持 openGauss 全局排序

  • 支持 Kafka

  • 不支持 DDL 变更

  • 不支持除 openGauss 以外数据库的全局排序

  • 不支持存在外键的表

  • 不支持在进行 CDC 服务期间触发了扩缩容,CDC 将停止对该表的变化数据的采集

06 注意事项

在 CDC 运行期间,请务必确保数据库日志不能被清除。

07 原理介绍

技术架构图

图片

主要分为 3 大组成部分:

  • CDC 服务端:提供增量数据订阅服务。使用网络通道的情况下,会开启服务端监听端口。

  • CDC 协议:使用网络通道的情况下需要。协议使用 protobuf3 定义,数据压缩率和编解码性能较高,不容易出现数据编解码问题。

  • CDC 客户端:使用网络通道的情况下需要。连接登录 CDC 服务端之后,订阅并消费增量数据,写入客户自己的目标端。需要引用系统提供的 cdc-client Maven 包。

08 部署 CDC 服务端

目前 CDC 和 Proxy 在相同进程内。一个 Proxy 实例可以同时提供原有的 Proxy 服务以及新的 CDC 服务。

CDC 配置只是在server.yaml新增了 1 个属性

cdc-server-port: 33071
  • 说明

配置了这个属性代表需要开启 CDC 服务端口,在所有 proxy 实例,也就是任意一个 proxy 实例都可以提供 CDC 服务。不配置则不开启。

CDC 的状态和 Proxy 类似,重要的数据都在注册中心(比如 ZK),进程里面有对应的状态。

CDC 服务端可以认为是无状态的。

  • CDC 服务端参数

参数名称 :cdc_decrypt_enabled

参数含义:CDC 是否开启将密文解析为明文推送到客户端,支持在线修改

参数值:true/false

默认值:false

09 CDC 消费端示例

需要使用 CDC 客户端和 CDC 服务端进行通信

如下为 CDC 消费端的配置示例

1、首先需要引入 CDC 客户端的 maven 依赖

  • <dependency>    <groupId>org.apache.shardingsphere</groupId>    <artifactId>shardingsphere-data-pipeline-cdc-client</artifactId>    <version>${project.version}</version></dependency>

2、基于 CDCClient 进行 CDC 数据同步

import com.google.protobuf.EmptyProto;import com.google.protobuf.InvalidProtocolBufferException;import com.google.protobuf.TimestampProto;import com.google.protobuf.TypeRegistry;import com.google.protobuf.WrappersProto;import com.google.protobuf.util.JsonFormat;import com.google.protobuf.util.JsonFormat.Printer;import lombok.extern.slf4j.Slf4j;import org.apache.shardingsphere.data.pipeline.cdc.client.CDCClient;import org.apache.shardingsphere.data.pipeline.cdc.client.parameter.StartCDCClientParameter;import org.apache.shardingsphere.data.pipeline.cdc.protocol.request.StreamDataRequestBody.SchemaTable;import org.apache.shardingsphere.data.pipeline.cdc.protocol.response.DataRecordResult.Record;
import java.time.LocalDateTime;import java.util.ArrayList;import java.util.Collections;import java.util.List;
@Slf4jpublic final class CDCDemo {        public static void main(final String[] args) {        StartCDCClientParameter parameter = new StartCDCClientParameter();        // Proxy的地址        parameter.setAddress("127.0.0.1");        // CDC 端口,和配置文件中一致        parameter.setPort(33071);        // Proxy的用户名        parameter.setUsername("root");        // Proxy的密码        parameter.setPassword("root");        // 订阅的逻辑库        parameter.setDatabase("sharding_db");        // 是否开启全量        parameter.setFull(true);        // 需要订阅的表        parameter.setSchemaTables(Collections.singletonList(SchemaTable.newBuilder().setTable("t_order").build()));        // 第二个参数是数据消费的逻辑,这里是简单打印下,也可以写到数据库或MQ        Printer printer = JsonFormat.printer().omittingInsignificantWhitespace().usingTypeRegistry(TypeRegistry.newBuilder().add(EmptyProto.getDescriptor().getMessageTypes()).add(TimestampProto.getDescriptor().getMessageTypes()).add(WrappersProto.getDescriptor().getMessageTypes()).build());        CDCClient cdcClient = new CDCClient(parameter, records -> {            List<String> list = new ArrayList<>();            for (Record record : records) {                String print;                try {                    print = printer.print(record);                } catch (final InvalidProtocolBufferException ex) {                    throw new RuntimeException(ex);                }                list.add(print);            }            System.out.printf("%s , received records: %s%n", LocalDateTime.now(), list);        });        cdcClient.start();    }}

FQA

Q:分片表经过 CDC 之后是分片表还是单表

A:单表,CDC 仅是数据捕获和传输,不会捕获和传输结构的变更。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/836863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 27题:移除元素

题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长…

概念解析 | 利用IAA迭代自适应方法实现高精度角度估计

利用IAA迭代自适应方法实现高精度角度估计 注1:本文系“概念辨析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:IAA迭代自适应方法在雷达角度估计中的应用。 背景介绍 在雷达目标检测与定位中,准确估计目标角度是实现高精度定位的关键。传统的基于…

【FAQ】如何隐藏网页H.265播放器EasyPlayer.js的实时录像按钮?

目前我们TSINGSEE青犀视频所有的视频监控平台&#xff0c;集成的都是EasyPlayer.js版播放器&#xff0c;它属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;包括WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#x…

2023最新版本Activiti7系列-监听器讲解

监听器 1.执行监听器 在流程实例执行过程中触发某个事件时&#xff0c;Activiti提供的执行监听器可以捕获该事件并执行相应的外部的Java代码&#xff0c;或者对指定的表达式求值。在流程实例执行过程中触发某个事件时&#xff0c;Activiti提供的执行监听器可以捕获该事件并执行…

《动手学深度学习》-67自注意力

沐神版《动手学深度学习》学习笔记&#xff0c;记录学习过程&#xff0c;详细的内容请大家购买书籍查阅。 b站视频链接 开源教程链接 自注意力 在深度学习中&#xff0c;经常使用卷积神经网络&#xff08;CNN&#xff09;或循环神经网络&#xff08;RNN&#xff09;对序列进行…

【暑期每日一练】 day14

目录 选择题 &#xff08;1&#xff09; 解析&#xff1a; &#xff08;2&#xff09; 解析&#xff1a; &#xff08;3&#xff09; 解析&#xff1a; &#xff08;4&#xff09; 解析&#xff1a; &#xff08;5&#xff09; 解析&#xff1a; 编程题 题一 …

全球十大知名看黄金即时行情的软件名单(综合榜单)

在当今的数字化时代&#xff0c;黄金投资已成为一种受欢迎的投资方式。为了获取即时的黄金行情信息&#xff0c;许多投资者开始使用黄金即时行情软件。然而&#xff0c;选择一款合适的软件并不是一件容易的事情。那么&#xff0c;如何选适合自己需求的软件呢&#xff1f;首先&a…

Hyper实现git bash在windows环境下多tab窗口显示

1.电脑上安装有git bash 下载链接&#xff1a;https://gitforwindows.org/ 安装Hyper 下载链接:官网 https://hyper.is/ 或者在百度云盘下载&#xff1a; https://pan.baidu.com/s/1BVjzlK0s4SgAbQgsiK1Eow 提取码&#xff1a;0r1f 设置 打开Hyper&#xff0c;依次点左上角-&g…

Arduino驱动MQ5模拟煤气气体传感器(气体传感器篇)

目录 1、传感器特性 2、硬件原理图 3、驱动程序 MQ5气体传感器,可以很灵敏的检测到空气中的液化气、天然气、煤气等气体,与Arduino结合使用,可以制作火灾液化气、天然气、煤气泄露报警等相关的作品。 1、传感器特性 MQ5用于消费和工业行业中气体泄漏检测设备,该传感器适…

【网络】DNS、ICMP、NAT

目录 一、DNS(Domain Name System) 1、DNS背景 2、域名简介 二、ICMP协议 1、ICMP功能 2、ICMP的报文格式 3、ping命令 4、traceroute命令 三、NAT技术 1、NAT技术背景 2、NAT IP转换过程 3、NAPT 4、NAT技术的缺陷 5、NAT和代理服务器 一、DNS(Domain Name Syste…

分布式应用:Zookeeper 集群与kafka 集群部署

目录 一、理论 1.Zookeeper 2.部署 Zookeeper 集群 3.消息队列 4.Kafka 5.部署 kafka 集群 6.FilebeatKafkaELK 二、实验 1.Zookeeper 集群部署​​​​​​​ 2.kafka集群部署 3.FilebeatKafkaELK 三、问题 1.解压文件异常 2.kafka集群建立失败 3.启动 filebeat报…

中国信通院发布《高质量数字化转型产品及服务全景图(2023)》

2023年7月27日&#xff0c;由中国信息通信研究院主办的2023数字生态发展大会暨中国信通院铸基计划年中会议在北京成功召开。 本次大会发布了中国信通院《高质量数字化转型产品及服务全景图&#xff08;2023&#xff09;》&#xff0c;中新赛克海睿思受邀出席本次大会并成功入选…

HarmonyOS应用开发者基础与高级认证题库——中级篇

系列文章目录 HarmonyOS应用开发者基础与高级认证题库——基础篇 HarmonyOS应用开发者基础与高级认证题库——中级篇 文章目录 系列文章目录前言一、判断二、单选三、多选 前言 今天刚换了台果子手机就收到了华子鸿蒙开发认证邀请&#xff08;认证链接&#xff09;&#xff0…

2020年江西省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书

2020年江西省职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书 赛项时间 9:00-12:00&#xff0c;共计3小时。 赛项信息 赛项内容 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 平台搭建与安全设备配置防护 任务1 网络平台搭建 9:00-12:00 100 任务…

2023下半年软考初级程序员报名入口-报名流程-备考方法

软考初级程序员2023下半年考试时间&#xff1a; 2023年下半年软考初级程序员的考试时间为11月4日、5日。考试时间在全国各地一致&#xff0c;建议考生提前备考。共分两科&#xff0c;第一科基础知识考试具体时间为9:00到11:30&#xff1b;第二科应用技术考试具体时间为2:00到4…

【C++刷题集】-- day5

目录 选择题 单选 编程题 统计回文⭐ 【题目解析】 【解题思路 - 穷举】 【优化】 连续最大和⭐ 【题目解析】 【解题思路】 【空间优化】 选择题 单选 1、 在上下文和头文件均正常情况下&#xff0c;以下程序的输出结果是 ( ) int x 1; do {printf("%2d\n&q…

Python批量查字典和双语例句

最近&#xff0c;有网友反映&#xff0c;我的批量查字典工具换到其它的网站就不好用了。对此&#xff0c;我想说的是&#xff0c;互联网包罗万象&#xff0c;网站的各种设置也有所不同&#xff0c;并不是所有的在线字典都可以用Python爬取的。事实上&#xff0c;很多网站为了防…

Python入门自学进阶-Web框架——38、redis、rabbitmq、git

缓存数据库redis&#xff1a; NoSQL&#xff08;Not only SQL&#xff09;泛指非关系型的数据库。为了解决大规模数据集合多重数据类的挑战。 NoSQL数据库的四大分类&#xff1a; 键值&#xff08;Key-Value&#xff09;存储数据库列存储数据库文档型数据库图形&#xff08;…

MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字

一、&#x1f49b;并发基本概念 并发的基本意思&#xff1a; 什么是并发呢&#xff1f;简单的理解就是同一时间执行 服务器同一时刻&#xff0c;给多个客户端提供服务&#xff5e;&#xff5e;&#xff0c;这两个客户端都可以给服务器提交事务。 如果提交两个事务&#xff0c;改…

召唤神龙打造自己的ChatGPT

在之前的两篇文章中&#xff0c;我介绍了GPT 1和2的模型&#xff0c;并分别用Tensorflow和Pytorch来实现了模型的训练。具体可以见以下文章链接&#xff1a; 1. 基于Tensorflow来重现GPT v1模型_gzroy的博客-CSDN博客 2. 花费7元训练自己的GPT 2模型_gzroy的博客-CSDN博客 有…